2011-01-10 74 views
5

我在連接mysql中的三個表時遇到了問題。如何在MySQL中將多個表連接到多個表?

,假設我們有一個表名爲posts,我把我的項目中,我有一個表命名爲likes我存儲USER_ID的和POST_ID在和第三臺名爲comments我存儲USER_ID的和POST_ID的和註釋的文本在它。

我需要一個查詢來獲取我的條目列表,每個條目的喜歡數和評論數。使用

林這個查詢:

SELECT posts.id, count(comments.id) as total_comments, count(likes.id) as total_likes 
FROM `posts` 
LEFT OUTER JOIN comments ON comments.post_id = posts.id 
LEFT OUTER JOIN likes ON likes.post_id = posts.id 
GROUP BY posts.id 

但與此查詢的問題,如果評論是空的一個項目,喜歡數僅僅是確定,但可以說,如果一個條目有2條評論和4喜歡,total_comments和total_likes都是「8」,這意味着mysql將它們相乘。 我很困惑,我不知道該怎麼辦。

感謝advace。

回答

7

使用count(distinct comments.id)count(distinct likes.id),前提是這些ID是唯一的。

+0

謝謝,工作就像一個魅力。 – Sallar 2011-01-10 20:18:18

4

嗯,這是一個方式來處理它(假設MySQL允許派生表):

SELECT posts.id, comments.total_comments, likes.total_likes 
FROM `posts` 
LEFT OUTER JOIN (select post_id, count(id) as total_comments from comments) comments 
    ON comments.post_id = posts.id 
LEFT OUTER JOIN (select post_id, count(id) as total_likes from likes) likes 
    ON likes.post_id = posts.id 

你也可以使用相關子查詢。如果沒有匹配的記錄,您可能需要一個案例統計信息來計入0。

讓我們嘗試相關子查詢:

SELECT posts.id, 
(select count(Id) from comments where post_id = posts.id) as total_comments, 
(select count(Id) from likes where post_id = posts.id) as total_likes 
FROM `posts` 
+0

謝謝,但是這個查詢爲第一條記錄返回了12個喜歡和2條評論(它有4個喜歡和2條評論),並且對於其他所有行都爲NULL。 – Sallar 2011-01-10 20:16:03