2014-01-18 44 views
4

我正在管理用户可以喜欢的社交网络的数据库,发表评论,并且我为每篇文章,例如和评论创建了一个表格。从另一个表计数的SQL

like --- post_id 
     user_id 

comment --- post_id 
      user_id 

现在,当我运行select * from post,我希望能够增加两列likescomments计数喜欢和有每种post_id评论的数量。

我该怎么做?

回答

5

您需要加入到这两个表中。

SELECT post.*, COUNT(likes.id) AS like_count, COUNT(comment.id) AS comment_count 
FROM post 
    LEFT JOIN likes ON post.id = likes.post_id 
    LEFT JOIN comment ON post.id = comment.post_id 
GROUP BY post.id 
3
SELECT 
    post.*, 
    IFNULL(COUNT(like.user_id),0) AS likecount, 
    IFNULL(COUNT(comment.user_id),0) AS commentcount 
FROM 
    post 
    LEFT JOIN like ON post.post_id=like.post_id 
    LEFT JOIN comment ON post.post_id=comment.post_id 
GROUP BY 
    like.post_id 
5

像这样:

SELECT * 
, (SELECT COUNT(*) FROM likes WHERE post_id=p.id) as LIKE_COUNT 
, (SELECT COUNT(*) FROM comment WHERE post_id=p.id) as COMMENT_COUNT 
FROM post p 

Demo on sqlfiddle.

4
​​

这就像@Richard的答案,但修改select,因为在group by列必须是select子句。

+1

在SQL Server下,我会同意 - 但是,MySQL对GROUP BY中的所有SELECT字段进行命名要少得多。您可以按主键进行分组,并且仍然从该表中选择*。 – Richard

+0

哦,我不知道。好评。 – carexcer