表:购物
shop_id shop_name shop_time
1 Brian 40
2 Brian 31
3 Tom 20
4 Brian 30
表:香蕉
banana_id banana_amount banana_person
1 1 Brian
2 1 Brian
我现在希望它打印:
姓名: 汤姆 |时间:20 |香蕉:0
姓名: 布莱恩 |时间:101 |香蕉:2个
我使用了这段代码:
$result = dbquery("SELECT tz.*, tt.*,
SUM(shop_time) as shoptime,
count(banana_amount) as bananas
FROM shopping tt
LEFT OUTER JOIN bananas tz ON tt.shop_name=tz.banana_person
GROUP by banana_person
LIMIT 40
");
while ($data5 = dbarray($result)) {
echo 'Name: '.$data5["shop_name"].' | Time: '.$data5["shoptime"].' | Bananas: '.$data5["bananas"].'<br>';
}
问题是我得到了这个:
姓名: 汤姆 |时间:20 |香蕉:0
姓名: 布莱恩 |时间:202 |香蕉:6个
我只是不知道如何解决这个问题。
问题是您正在构建两个表的叉积,该叉积将结果乘以相反表中的行数。要解决此问题,首先计算聚合派生表中的一个表的结果,并将此聚合结果连接到另一个表。
SELECT
shop_name,
shoptime,
IFNULL(SUM(banana_amount), 0)
FROM (
SELECT shop_name, SUM(shop_time) as shoptime
FROM shopping
GROUP BY shop_name
) tt
LEFT JOIN bananas tz ON tt.shop_name=tz.banana_person
GROUP BY shop_name
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)