2013-06-12 111 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 

这开始作为一个真正的问题,然后我有什么可能的工作思想......它做到了。希望这会帮助别人。

相关问题