我有以下
SELECT
help_categories.helpCatId,
help_categories.helpCatName,
help_categories.helpCatSlug,
COUNT(help_articles.helpArtCatId)
FROM
help_categories
JOIN
help_articles
ON help_categories.helpCatId = help_articles.helpArtCatId
WHERE
help_categories.helpCatActive = 1
AND
help_articles.helpArtActive = 1
GROUP BY
help_articles.helpArtCatId
ORDER BY
help_categories.helpCatId ASC
此查询从数据库中选择所有帮助类别,并计算其中的所有文章。
问题:当一个类别有0篇文章时,它没有被提取。
这是一个很好的查询,还是有人知道更好的方法来做到这一点。所以我想要所有类别+每个类别中的文章数量(即使一个类别有0篇文章我还想从数据库中获取类别数据)。
提前致谢!
答案 0 :(得分:2)
您的WHERE
子句取消LEFT JOIN
空值的工作:... AND help_articles.helpArtActive = 1
。这需要一个" OR NULL":
应该是:
WHERE
help_categories.helpCatActive = 1
AND
(help_articles.helpArtActive = 1
OR
help_articles.helpArtActive IS NULL
)
根据评论进行修改:
此外,GROUP BY help_articles.helpArtCatId
会将help_articles.helpArtCatId
NULL放到其他位置。可能希望改为GROUP BY help_categories.helpCatId
。
答案 1 :(得分:0)
你想要一个left join。这允许您从" left"中检索所有行。查询的一面,无论是否有"右边的#34;查询的一面。
答案 2 :(得分:0)
使用LEFT JOIN而不是JOIN。