我有一个php/mysql应用程序
应用程序使用查询来获取表的值 leads
,使用2个子查询返回第二个表中的值的总和和计数 refunds
这两个表用外键链接 lead_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
我想提高这个查询的性能。
我的想法是:
使用concat和管道分隔符将这两个子查询组合成一个子查询
在应用程序级别使用php分解返回的字符串以获得2个值。
示例如下:
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);
这种方法可行,但我的问题是:
这种形式不好吗?
我有什么理由不这样做吗?
有更好的解决办法吗?
1条答案
按热度按时间njthzxwz1#
使用
join
!在某些情况下,你可能会发现
join
在聚合之前。