mysql - tables - self join用法




MySQL多個左連接 (2)

您缺少GROUP BY子句:

SELECT news.id, users.username, news.title, news.date, news.body, COUNT(comments.id)
FROM news
LEFT JOIN users
ON news.user_id = users.id
LEFT JOIN comments
ON comments.news_id = news.id
GROUP BY news.id

左連接是正確的。 如果您使用了INNER或RIGHT JOIN,那麼您將無法獲得沒有評論的新聞項目。

我正在嘗試為我正在處理的網站創建新聞頁面。 我決定使用正確的MySQL查詢(意思是COUNT(id)和連接而不是多個查詢或num_rows。)我正在使用一個PDO包裝器,它應該運行正常,並且當直接通過運行時仍然會失敗MySQL CLI應用程序。

基本上,我有3張桌子。 一個持有新聞,一個持有評論,一個持有用戶。 我的目標是創建一個頁面,顯示所有(稍後將分頁)新聞帖子標題,正文,作者和日期。 當我使用第二個查詢來獲取用戶名時,這工作正常,但後來我決定使用JOIN。

所以有什麼問題? 好吧,我需要兩個連接。 一種是獲取作者的用戶名,另一種是獲取評論的數量。 當我只是找到作者的用戶名時,一切都按預期工作。 顯示新聞表中的所有行(有2個)。 但是,當我為評論行添加第二個LEFT JOIN時,我最終只收到一行來自新聞(記住,有2個),COUNT(comments.id)給我2個(它應該顯示1,因為我有每個帖子的評論。)

我究竟做錯了什麼? 為什麼它只顯示一個新聞帖,並且說它有兩個評論,當有兩個新聞帖子,每個都有一個評論?

SELECT news.id, users.username, news.title, news.date, news.body, COUNT(comments.id)
FROM news
LEFT JOIN users
ON news.user_id = users.id
LEFT JOIN comments
ON comments.news_id = news.id

另外,為了確定另一件事,我的左邊加入評論是獲取所有帖子的正確方法,無論他們是否有評論,對嗎? 或者這是一個正確的加入? 哦,最後一件事......如果我將comments.news_id = news.id切換到news.id = comments.news_id,我得到0結果。


顯示每個新聞帖標題的所有詳細信息,即。 “news.id”是主鍵,你需要為“news.id”使用GROUP BY子句

SELECT news.id, users.username, news.title, news.date,
       news.body, COUNT(comments.id)
FROM news
LEFT JOIN users
ON news.user_id = users.id
LEFT JOIN comments
ON comments.news_id = news.id
GROUP BY news.id




join