Php 使用CONCAT从子查询返回多个值
我有一个PHP/MySQL应用程序 应用程序使用一个查询来获取表Php 使用CONCAT从子查询返回多个值,php,mysql,sql,concat,Php,Mysql,Sql,Concat,我有一个PHP/MySQL应用程序 应用程序使用一个查询来获取表leads,并使用两个子查询来返回第二个表Returns中的值的总和和计数 这两个表用外键链接lead\u id SELECT l.*, IFNULL( (SELECT SUM(amount) FROM refunds r WHERE l.lead_id = r.lead_id),0) amount_refunded,
leads
,并使用两个子查询来返回第二个表Returns
中的值的总和和计数
这两个表用外键链接lead\u id
SELECT l.*,
IFNULL(
(SELECT SUM(amount)
FROM refunds r
WHERE l.lead_id = r.lead_id),0) amount_refunded,
IFNULL(
(SELECT COUNT(*)
FROM refunds r
WHERE l.lead_id = r.lead_id),0) number_refunded
FROM leads l
我想提高这个查询的性能
我的想法是:
SELECT l.*,
(SELECT CONCAT(IFNULL(COUNT(*),0),'|', IFNULL(SUM(amount),0))
FROM fee_refunds r
WHERE l.lead_id = r.lead_id) values_refunded
FROM fee_leads l
然后在应用程序中,在循环中:
list($amount_refunded, $number_refunded) = explode('|', $row->values_refunded);
这种方法可行,但我的问题是:
加入
SELECT l.*, r.amount_refunded, r.number_refunded
FROM leads l LEFT JOIN
(SELECT lead_id, COUNT(*) as number_refunded, SUM(amount) as amount_refunded
FROM refunds r
GROUP BY lead_id
) r
ON l.lead_id = r.lead_id;
在某些情况下,您可能会发现在聚合之前加入会更快。使用加入
SELECT l.*, r.amount_refunded, r.number_refunded
FROM leads l LEFT JOIN
(SELECT lead_id, COUNT(*) as number_refunded, SUM(amount) as amount_refunded
FROM refunds r
GROUP BY lead_id
) r
ON l.lead_id = r.lead_id;
在某些情况下,您可能会发现在聚合之前加入会更快