Mysql在不同的表中选择两列

时间:2014-11-21 08:11:30

标签: php mysql

如下所示我选择具有相同表和条件的两个不同列(count_group和group_total)。 我觉得这种方法使页面变慢。有什么建议吗?

$sql3 = "SELECT SUM(mr.payment_amount) as total ,
COUNT(mr.order_id) as count_personal , 

(SELECT COUNT(DISTINCT mr.group_order_id) 
FROM event_mgmt_registration mr 
WHERE mr.event_nid = ".$nid." 
AND mr.status='completed' 
AND DATE_FORMAT(FROM_UNIXTIME(`datestamp`), '%Y-%m-%d') <= '".$Sum['latest_date']."' 
AND mr.group_order_id != '' ) as count_group ,

(SELECT SUM(mr.payment_amount) 
FROM event_mgmt_registration mr 
WHERE mr.event_nid = ".$nid." 
AND mr.status='completed' 
AND DATE_FORMAT(FROM_UNIXTIME(`datestamp`), '%Y-%m-%d') <= '".$Sum['latest_date']."' 
AND mr.group_order_id != '' ) as group_total 

FROM event_mgmt_registration mr 
WHERE mr.event_nid =".$nid." 
AND mr.status='completed'  
AND DATE_FORMAT(FROM_UNIXTIME(`datestamp`), '%Y-%m-%d') <= '".$Sum['latest_date']."' 
AND mr.order_id !=''";

2 个答案:

答案 0 :(得分:0)

为了获得更好的性能,您最好使用UNION将三个结果分别作为一行:

SELECT 
SUM(mr.payment_amount) as total ,
COUNT(mr.order_id) as count_personal
FROM event_mgmt_registration mr 
WHERE mr.event_nid =".$nid." 
AND mr.status='completed'  
AND DATE_FORMAT(FROM_UNIXTIME(`datestamp`), '%Y-%m-%d') <= '".$molpaySum['latest_date']."' 
AND mr.order_id !=''

UNION ALL

(SELECT NULL, COUNT(DISTINCT mr.group_order_id)
FROM event_mgmt_registration mr 
WHERE mr.event_nid = ".$nid." 
AND mr.status='completed' 
AND DATE_FORMAT(FROM_UNIXTIME(`datestamp`), '%Y-%m-%d') <= '".$molpaySum['latest_date']."' 
AND mr.group_order_id != '' )

UNION ALL

(SELECT NULL, SUM(mr.payment_amount)
FROM event_mgmt_registration mr 
WHERE mr.event_nid = ".$nid." 
AND mr.status='completed' 
AND DATE_FORMAT(FROM_UNIXTIME(`datestamp`), '%Y-%m-%d') <= '".$Sum['latest_date']."' 
AND mr.group_order_id != '' )  

答案 1 :(得分:0)

为什么需要查询每个参数?您可以使用一个查询来实现它

试试这个

$sql3 = "
    SELECT 
        SUM(mr.payment_amount) as total ,
        COUNT(mr.order_id) as count_personal , 
        COUNT(DISTINCT mr.group_order_id) as count_group,
        SUM(mr.payment_amount) as group_total

    FROM event_mgmt_registration mr 

    WHERE 
        mr.event_nid =".$nid." AND 
        mr.status='completed'  AND 
        DATE_FORMAT(FROM_UNIXTIME(`datestamp`), '%Y-%m-%d') <= 
            '".$molpaySum['latest_date']."' AND 
        mr.order_id !=''
";

请注意,在group_total中,您使用$Sum['latest_date']但不使用$molpaySum['latest_date']。如果它不是印刷错误,您应该保留此查询,如下所示:

    $sql3 = "
    SELECT 
        SUM(mr.payment_amount) as total ,
        COUNT(mr.order_id) as count_personal , 
        COUNT(DISTINCT mr.group_order_id) as count_group,
        (SELECT SUM(mr.payment_amount) 
         FROM event_mgmt_registration mr 
         WHERE mr.event_nid = ".$nid." 
             AND mr.status='completed' 
             AND DATE_FORMAT(FROM_UNIXTIME(`datestamp`), '%Y-%m-%d') <=
                 '".$Sum['latest_date']."' 
             AND mr.group_order_id != '' 
        ) as group_total 

    FROM event_mgmt_registration mr 

    WHERE 
        mr.event_nid =".$nid." AND 
        mr.status='completed'  AND 
        DATE_FORMAT(FROM_UNIXTIME(`datestamp`), '%Y-%m-%d') <= 
            '".$molpaySum['latest_date']."' AND 
        mr.order_id !=''
";
相关问题