如下所示我选择具有相同表和条件的两个不同列(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 !=''";
答案 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 !=''
";