sql:连接两个表,每行重复计数?

zbsbpyhn  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(693)

音乐网站数据库中的3个表:
用户(用户id、名称、密码)
曲目(曲目id,标题)
用户喜欢此曲目(用户id,曲目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' )

我还想在客户端应用程序中显示一首特定歌曲的emoji。如果他喜欢它来显示like emoji资源,如果他不喜欢这首歌来显示其他资源。这个查询完成了任务:

SELECT COUNT(`track_id`) AS `liked` FROM `user_likes_this_track` 
        WHERE `user_id` = '$logged_user_id'
        AND `track_id` = '$track_id';

如果用户喜欢这首歌,则liked为1,如果用户不喜欢,则为0
但是,问题是当他去搜索一个他可能喜欢或不喜欢的曲目过滤列表。
从用户的Angular 来看,我试图从搜索结果中得到track\u id,track\u title,liked,甚至是所有track的组合,得到如下结果:

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
...

有没有可能在不改变和添加额外表的情况下为这个解决方案找到一个神奇的查询?
谢谢你们宝贵的时间。

mec1mxoz

mec1mxoz1#

你可以用

$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')";
x6yk4ghg

x6yk4ghg2#

SELECT 
    a.track_id, 
    a.title, 
    CASE 
        WHEN b.track_id IS NULL THEN 0 
        ELSE 1 
    END
FROM track a
LEFT JOIN user_likes_this_track b ON b.track_id = a.track_id
    AND b.user_id = :userID
;

相关问题