我有三个表 Post: int id, varchar title
评论: int comment_id, int post_id, varchar comment
类似: int like_id, int post_id
在这里post_id是一个外键引用表 post 。 / p>
我正在尝试获取所有帖子以及每个帖子的评论数和喜欢数。
这是我到目前为止所做的:
SELECT post.id, post.title, count(comment.id) as comments, FROM post left join comment on comment.post_id = post.id GROUP by post.id
这给了我所有帖子的结果以及每个帖子的评论数量。现在,当我为“喜欢”表添加下一个左联接时,计数结果将返回其实际值的两倍。
例如,如果某个帖子X有2条评论,并且我添加了 like 表,则加入同一帖子的计数,然后开始给我4条关于帖子X的评论总数。
帮助表示赞赏。
答案 0 :(得分:3)
我将使用两个单独的子查询来编写此代码以查找评论和喜欢的次数:
SELECT
p.id,
p.title,
COALESCE(c.comment_cnt, 0) AS comments,
COALESCE(l.like_cnt, 0) AS likes
FROM post p
LEFT JOIN
(
SELECT post_id, COUNT(*) AS comment_cnt
FROM comments
GROUP BY post_id
) c
ON p.id = c.post_id
LEFT JOIN
(
SELECT post_id, COUNT(*) AS like_cnt
FROM likes
GROUP BY post_id
) l
ON p.id = l.post_id;