2014-01-18 45 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