Php Mysql在不同的表中选择两列

Php Mysql在不同的表中选择两列,php,mysql,Php,Mysql,如下所示,我选择了两个不同的columncount_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.e

如下所示,我选择了两个不同的columncount_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 !=''";

为了获得更好的性能,您最好将三个结果合并为一行:

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 != '' )  

为什么每个参数都需要查询?我想你只要问一个问题就可以了

试试这个

$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 !=''
";

你的查询显示了什么?好吧,你只是觉得它会让你的页面变慢,还是实际上页面变慢了?单独测量每个查询并提供有关运行时间的信息,使用EXPLAIN获得有关MySQL如何运行查询的正确信息。$query3=db\u query$sql3$Sum=$query3->fetchAssoc$结果=$howeiSum['count_group'];错误:未定义索引:count\u group,对不起,是无法定义count\u group和group\u total的并集问题吗?total和count\u personal是我更新后的答案。我意识到union只使用第一个select列名称,因此group\u order\u id和payment\u amount在total和count\u personal下。。。谢谢你的union方法顺便问一下,union的运行速度比我发布的sql快吗?
    $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 !=''
";