我在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;

10-05 20:33
查看更多