2016-02-21 35 views
-2

我無法弄清楚如何從JOIN捕獲多個值。不應該那麼困難,但不知何故我不記得如何做到這一點。MYSQL:如何處理一個到多個表中的多個值JOIN

Authors: 

id | authorname 

Books 

id ] authorid |bookname 

SELECT a.*,b.* 
FROM authors `a` 
LEFT JOIN books `b` 
ON a.id = b.authorid 
WHERE a.id = 1 
GROUP BY a.id 

這只是返回作者的第一本書,不是所有的人。

這不是整個查詢,因爲還有其他一些事情正在進行,例如發佈者,上次排序等,以便我想按作者對其進行分組。此外,響應得到JSON編碼併發送到應用程序。因此,如果可能的話,我不希望查詢返回每本書的行,因爲這會使jsonencoding和api複雜化。

我只想弄清楚如何捕捉作者的多本書,並將它們保存在某種數組中,以便稍後可以對其進行解碼。

感謝您通過正確途徑獲得的任何想法。

編輯:

與GROUP_CONCAT(b.bookname)爲book names解決,... 這使得以逗號分隔的列表中的多個值。

+0

鬆散GROUP BY並查看它做了什麼 – RiggsFolly

+0

它打印出每本書的記錄。它確實獲得了所有書籍,但是這些記錄不再與作者對應,並且這是針對作者頁面的(其中列出了該作者的書籍)。 – zztop

回答

0

我相信你需要刪除你的GROUP BY條款,因爲你真的不需要這個條款。

SELECT a.*,b.* 
FROM authors `a` 
LEFT JOIN books `b` 
ON a.id = b.authorid 
WHERE a.id = 1 

您沒有使用任何聚合函數,因此您不需要將結果集分組到單個列中的分組列中。

+0

當我拿出GROUP BY時,我得到每本書的記錄。所以如果有三本書,那麼這個作者有三條記錄。如果有兩本書,則作者有兩個記錄。這混亂了作者的顯示。 – zztop

+0

然後,您最好向我們展示您用於處理結果的PHP代碼。還有你想要的結果 – RiggsFolly

+0

@zztop這是預期的行爲。如果你想爲每個作者設置一行,那麼添加'GROUP BY'並使用__aggregate函數___像'array_agg()'來檢索關於所有書籍的信息。你的問題似乎不是'SQL'。 –