SQL:连接两个表并每行重复计数?

音乐网站数据库中的 3 个表:


用户(用户 ID、名称、密码)


曲目(曲目 ID、标题)


user_likes_this_track ( user_id, track_id )


当某个特定用户登录时。使用 PHP、MySQL 和 JSON API,我可以从最后一个表中检查用户喜欢哪些歌曲。


SELECT * FROM `track` WHERE `id` IN (SELECT `track_id` FROM `user_likes_this_track` WHERE `user_id` = '$logged_user_id' )

我还想在客户端应用程序中显示特定歌曲的表情符号。如果他喜欢它就显示喜欢的表情符号资源,如果他不喜欢这首歌就显示其他资源。这个查询完成了这项工作:


SELECT COUNT(`track_id`) AS `liked` FROM `user_likes_this_track` 

        WHERE `user_id` = '$logged_user_id'

        AND `track_id` = '$track_id';

        

如果用户喜欢这首歌,Liked为1,如果不喜欢,Liked 为0


但是,问题是当他去搜索包含他可能喜欢或不喜欢的曲目的过滤列表时。


从用户的角度来看,我试图从搜索结果中获取track_id、track_title、Likes甚至所有曲目的组合,以获得如下内容:


track_id, title,  liked

1       ,'ZHU...' , 1         // he likes this song

2       ,'Sia...' , 1         // he likes SIA too

3       ,'other.' , 0         // 0 occurrence in user_likes_this_track

...

是否可以在不更改和添加额外表的情况下找到此解决方案的神奇查询?


感谢大家抽出宝贵的时间。


不负相思意
浏览 91回答 2
2回答

偶然的你

你可以使用类似的东西$sql = "SELECT track_id, title, 1 as liked from track where track_id NOT IN (SELECT track_id from user_likes_this_track where user_id = '$logged_user_id') UNION SELECT track_id, title, 0 as liked from track where track_id IN (SELECT track_id from user_likes_this_track where user_id = '$logged_user_id')";

慕桂英3389331

SELECT     a.track_id,     a.title,     CASE         WHEN b.track_id IS NULL THEN 0         ELSE 1     ENDFROM track aLEFT JOIN user_likes_this_track b ON b.track_id = a.track_id    AND b.user_id = :userID;
打开App,查看更多内容
随时随地看视频慕课网APP