【发布时间】:2020-07-18 10:22:05
【问题描述】:
我有 2 个表格、文章和 article_cmets。试图获取文章列表页面上的评论计数。但是,我的查询不会返回任何没有任何评论的文章。
SELECT `articles`.*, COUNT(comments.id) AS comment_count
FROM `articles` as `articles`
LEFT JOIN `article_comments` as `comments` ON `articles`.`id` = `comments`.`article_id`
如果该帖子没有 cmets,如何使查询返回具有 comment_count 为 0 的文章的所有行?
【问题讨论】:
-
正如所写的那样,查询应该做你想做的事情(尽管对于没有 cmets 的任何文章,它会将
NULL提供为comment_count;你可以将其转换为0和COALESCE)。是否有WHERE子句您没有向我们展示? -
我在您的查询中没有看到 GROUP BY 子句。您必须使用函数的窗口变体:
SELECT `articles`.*, COUNT(comments.id) OVER () AS comment_count ... -
@Nick 没有 where 子句。问题是它没有返回没有评论的文章。
-
请通过编辑而非 cmets 进行澄清。但是——这是一个常见问题。 (显然。)在考虑发布之前,请阅读手册和谷歌任何错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有和没有您的特定字符串/名称和站点:stackoverflow.com 和标签;阅读许多答案。如果您发布问题,请使用一个短语作为标题。反映你的研究。请参阅How to Ask 和投票箭头鼠标悬停文本。
-
请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出您可以给出的最少代码,即您显示的代码可以通过您显示的代码扩展为不正常。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)和输入为格式化为表的代码的 SQL。
标签: php mysql sql join group-by