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


SQL display records matching lookup table first then all other records

想象这是一个音乐网站,我有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子句来匹配用户,它只显示用户的收藏夹,而不显示其他歌曲。

解决方案是使用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

这开始是一个真正的问题,然后我有一个想法,什么可能工作…它确实做到了。