2013-06-12 110 views
0

想象一下,它是一個音樂網站,我有1000首歌曲。用戶可以「喜歡」歌曲,它使用memberID和songID存儲在查找表中。SQL顯示記錄首先匹配查找表然後所有其他記錄

然後我想要顯示所有歌曲列表頂部的特定用戶的收藏夾。

SELECT s.*, s.songID theSongID, f.* 
FROM su_songs AS s 
left JOIN su_member_favourites_lookup AS f 
ON f.songID = s.songID 
ORDER by f.songID IS NULL, s.songTitle ASC 

......工作在頂部顯示所有最愛。但我只是想顯示已登錄用戶的收藏夾中,然後將所有其他歌曲的下方

SELECT s.*, s.songID theSongID, f.* 
FROM su_songs AS s 
left JOIN su_member_favourites_lookup AS f 
ON f.songID = s.songID 
WHERE memberID = " . $memberID . " 
ORDER by f.songID IS NULL, s.songTitle ASC 

...如果我添加WHERE子句給用戶相匹配,它只顯示用戶的收藏和遺漏了其他地區這些歌。

+0

http://stackoverflow.com/questions/8388242/left-right-join-not-returning-empty-row – BlitZ

+0

@CORRUPT。答案可能是一樣的,但問題是非常不同的。 – Steve

回答

1

的解決方案是使用AND代替WHERE

SELECT s.*, s.songID theSongID, f.* 
FROM su_songs AS s 
LEFT JOIN su_member_favourites_lookup AS f 
ON f.songID = s.songID AND f.memberID = " . $memberID . " 
ORDER by f.songID IS NULL, s.songTitle ASC 

這開始作爲一個真正的問題,然後我有什麼可能的工作思想......它做到了。希望這會幫助別人。

相關問題