需要显示SQL部分空结果

时间:2014-03-06 19:42:03

标签: php mysql sql

我也需要为BRANDS显示空行。我的意思是,此查询中没有显示第三个品牌,请看:

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(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.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 
  AND da_brands.date <= NOW() 
GROUP BY da_brands.name 
ORDER BY da_brands.name ASC 

结果:

brand_name  total_deals total_downloaded_coupons    total_validated_coupons total_likes
Marca2  2   0   0   1
Marca1  9   0   0   4

此条件仅显示交易中的品牌,但我想要所有品牌......:

        AND da_deals.fk_brand_id = da_brands.id

知道我应该使用什么声明吗?

非常感谢你。!!!

1 个答案:

答案 0 :(得分:1)

WHERE谓词中的以下行是问题...

AND da_deals.fk_brand_id = da_brands.id

您需要LEFT JOIN到da_deals,就像对da_logs一样,并将上面的那一行移到ON语句中进行连接。

见下文......

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(da_logs.id) AS total_likes 
FROM da_brands
LEFT JOIN da_deals 
ON da_brands.id = da_deals.fk_brand_id
LEFT JOIN da_logs 
ON da_logs.fk_deal_id = da_deals.id 
AND da_logs.fk_deal_id = da_deals.id 
AND da_logs.type = 'deal_like' 
WHERE da_brands.fk_club_id = 6 
AND da_brands.date <= NOW() 
GROUP BY da_brands.name 
ORDER BY da_brands.name ASC