我有三个表发布:int id, varchar title
注释:intcomment_id,intpost_id,varchar注释
喜欢:intlike_id,intpost_id
这里post_id是一个外键引用表发布。
我正在努力获取所有帖子,以及每条帖子的评论数和点赞数。
这是我到目前为止所做的:
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
这给了我所有帖子的结果和每个帖子的评论数。现在,只要我为likes表添加下一个左连接,计数结果就会返回实际值的两倍。
例如,如果一个帖子 X 有 2 条评论,并且我添加了类似的表加入同一帖子的计数,则开始给我 4 条作为帖子 X 的评论总数。
感谢帮助。
我会使用两个单独的子查询来查找评论和点赞的计数:
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;