簡體   English   中英

MySQL多個左連接

[英]MySQL Multiple Left Joins

我正在嘗試為我正在處理的網站創建新聞頁面。 我決定使用正確的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結果。

您缺少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,那么您將無法獲得沒有評論的新聞項目。

顯示每個新聞帖標題的所有詳細信息,即。 “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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM