我最近一直在研究博客系统,我遇到了一个问题。我有两个表,一个用于博客帖子,另一个用于评论这些帖子。这是我目前用于检索所有帖子信息以及评论数量的查询:
SELECT bp.*, COUNT(bpc.id) AS post_comments
FROM blog_posts AS bp
LEFT JOIN blog_post_comments AS bpc ON bpc.post_id = bp.id
LIMIT 0, 10
现在,正如我在标题中所述,这只返回一篇关于一篇文章的数据,尽管它应该返回10篇帖子。为什么会这样?
谢谢!
答案 0 :(得分:4)
您缺少GROUP BY
子句,并且由于MySQL对于SELECT
中的聚合函数和列没有出现在组中,因此它会向下折叠到显示总计数的一行,但是来自其他列的混合列值。
SELECT bp.*, COUNT(bpc.id) AS post_comments
FROM blog_posts AS bp
LEFT JOIN blog_post_comments AS bpc ON bpc.post_id = bp.id
GROUP BY bp.id
LIMIT 0, 10
为MySQL之外的RDBMS执行此操作的更便携方式是加入一个子查询,该子查询仅返回post_id
和每个id的帖子数,允许其余列{{1} }被选中而不会出现在blog_posts
。
GROUP BY
答案 1 :(得分:2)
由于您使用COUNT,因此会将所有帖子视为相同。 试试看它是否有效:
SELECT bp.*, COUNT(bpc.id) AS post_comments
FROM blog_posts AS bp
LEFT JOIN blog_post_comments AS bpc ON bpc.post_id = bp.id
GROUP BY bp.id
LIMIT 0, 10
我不确定这是不是问题。只是猜测。 :)
答案 2 :(得分:1)