我在MYSQLI中使用了以下代码:
SELECT da_brands.name AS brand_name,
COUNT(da_deals.id) AS total_deals,
0 AS total_downloaded_coupons,
0 AS total_validated_coupons,
COUNT(da_logs.id) AS total_likes
FROM da_brands, da_deals LEFT JOIN da_logs
ON da_logs.fk_deal_id = da_deals.id
AND da_logs.type = 'deal_like'
WHERE da_brands.fk_club_id = 6
AND da_deals.fk_brand_id = da_brands.id
GROUP BY da_brands.name
ORDER BY da_brands.name ASC
结果:
brand_name total_deals total_downloaded_coupons total_validated_coupons otal_likes
Marca2 2 0 0 1
Marca1 12 0 0 4
应该:
brand_name total_deals total_downloaded_coupons total_validated_coupons total_likes
Marca2 2 0 0 1
Marca1 9 0 0 4
任何想法?
最佳答案
我相信您想要COUNT(DISTINCT da_deals.id) AS total_deals,
,因为您只想对每个交易ID进行一次计数。
编辑:您的FROM
语句是隐式内部联接(逗号)和显式外部联接的列表。我错过了。
您的查询可能应该这样写,并带有所有显式联接:
SELECT da_brands.name AS brand_name,
COUNT(DISTINCT da_deals.id) AS total_deals,
0 AS total_downloaded_coupons,
0 AS total_validated_coupons,
COUNT(DISTINCT da_logs.id) AS total_likes
FROM da_brands
INNER JOIN da_deals
ON da_deals.fk_brand_id = da_brands.id
LEFT JOIN da_logs
ON da_logs.fk_deal_id = da_deals.id
AND da_logs.type = 'deal_like'
WHERE da_brands.fk_club_id = 6
GROUP BY da_brands.name
ORDER BY da_brands.name ASC;
要显示即使缺乏交易和喜欢的品牌,也可以尝试使用
LEFT JOIN
,如下所示:SELECT da_brands.name AS brand_name,
COUNT(DISTINCT da_deals.id) AS total_deals,
0 AS total_downloaded_coupons,
0 AS total_validated_coupons,
COUNT(DISTINCT da_logs.id) AS total_likes
FROM da_brands
LEFT JOIN da_deals
ON da_deals.fk_brand_id = da_brands.id
LEFT JOIN da_logs
ON da_logs.fk_deal_id = da_deals.id
AND da_logs.type = 'deal_like'
WHERE da_brands.fk_club_id = 6
GROUP BY da_brands.name
ORDER BY da_brands.name ASC;