SQL显示记录首先匹配查找表然后所有其他记录

时间:2013-06-12 05:09:32

标签: php sql join

想象一下,这是一个音乐网站,我有1000首歌曲。用户可以“喜欢”歌曲,使用memberID和songID将其存储在查找表中。

然后,我想在所有歌曲列表的顶部显示特定用户的收藏夹。

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子句以匹配用户,它只显示用户的收藏夹并省略其余的歌曲。

1 个答案:

答案 0 :(得分: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

这开始是一个真实的问题,然后我想到了可能有用的东西......它确实如此。希望这会帮助其他人。