我有3個表:singers
,songs
,albums
。他們都與singer_id
MySQL LEFT JOIN多表邏輯問題
即使沒有匹配singer_id
我需要得到他們所有人。我設法讓所有的人都與此查詢:
SELECT singers.singer_name, albums.album_name, songs.song_name
FROM singers
LEFT JOIN albums ON singers.singer_id = albums.singer_id
LEFT JOIN songs ON albums.singer_id = songs.singer_id
WHERE singer_id = ?
但問題是,我可以;噸正確顯示的結果。
假設歌手有3張專輯和11首歌曲。我這是怎麼顯示出來......
顯示歌手名稱:
echo $results[0]['singer_name']
顯示歌曲名稱:
foreach($results as $song) {
// PROBLEM: instead of getting 11 songs i'm getting 33 results so each song show up 3 times.
echo $song['song_name']
}
顯示專輯:
foreach($results as $album) {
// PROBLEM: i'm getting 33 albums instead of 3 each album shows up 3 times.
echo $album['album_name']
}
編輯: 歌曲表參照專輯表album_id
但是第是沒有專輯的歌曲,所以我需要得到的結果只是由singer_id
我需要得到的是: 11首歌曲。 3張專輯。 1名歌手。
在此先感謝。編輯: 這個解決方案爲我工作。 我想要的是獲得指定歌手ID和專輯的所有歌曲 我想要的結果看起來像這樣。
singer_name : song_name : album_name
...............................................................
Jay Z : 99 Problems : NULL
Jay Z : Gotta Have It : Watch the Throne
所以我想讓所有歌手的歌曲即使他們沒有在任何專輯呢。
這是我使用的查詢。
SELECT singers.singer_name, songs.song_name, albums.album_name
FROM singers
LEFT JOIN songs ON singers.singer_id = songs.singer_id
LEFT JOIN albums ON albums.album_id = songs.album_id
WHERE singers.singer_id = ?
感謝@ knittl我得到了我需要的結果。
但現在還有另一個問題。 我有3張專輯和11首歌曲
歌曲顯示正常,但是當我在做專輯一foreach
循環,我再次得到33張專輯....
我怎樣才能正確顯示相冊?我只有3張專輯。
使用該邏輯,您將獲得交叉連接。一首歌也應該與特定專輯相關 - 你得到的是與每張專輯相關的每首歌曲的列表。 – GalacticCowboy
@GalacticCowboy:邏輯,是的 - 但不是提供的LEFT JOIN'd查詢。無論哪種方式,查詢都會返回大量垃圾數據。 –
#galacticcowboy我知道我可以參考歌曲的專輯,但是有沒有專輯附加到他們的歌曲呢。 – ParparDromi