【问题标题】:SQL display records matching lookup table first then all other records [closed]SQL首先显示匹配查找表的记录,然后显示所有其他记录[关闭]
【发布时间】:2013-06-12 05:09:32
【问题描述】:

想象它是一个音乐网站,我有 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 子句来匹配用户,它只会显示用户的最爱,而忽略其余的歌曲。

【问题讨论】:

标签: php sql join


【解决方案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

这开始是一个真正的问题,然后我想到了可行的方法......并且确实如此。希望这对其他人有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多