我正在管理用戶可以喜歡的社交網絡的數據庫,發表評論,並且我爲每篇文章,例如和評論創建了一個表格。從另一個表計數的SQL
like --- post_id
user_id
comment --- post_id
user_id
現在,當我運行select * from post
,我希望能夠增加兩列likes
和comments
計數喜歡和有每種post_id
評論的數量。
我該怎麼做?
我正在管理用戶可以喜歡的社交網絡的數據庫,發表評論,並且我爲每篇文章,例如和評論創建了一個表格。從另一個表計數的SQL
like --- post_id
user_id
comment --- post_id
user_id
現在,當我運行select * from post
,我希望能夠增加兩列likes
和comments
計數喜歡和有每種post_id
評論的數量。
我該怎麼做?
您需要加入到這兩個表中。
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
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
像這樣:
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
這就像@Richard的答案,但修改select
,因爲在group by
列必須是select
子句。
在SQL Server下,我會同意 - 但是,MySQL對GROUP BY中的所有SELECT字段進行命名要少得多。您可以按主鍵進行分組,並且仍然從該表中選擇*。 – Richard
哦,我不知道。好評。 – carexcer