为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
不负相思意 2023-08-19 16:13:36
音乐网站数据库中的 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,  liked1       ,'ZHU...' , 1         // he likes this song2       ,'Sia...' , 1         // he likes SIA too3       ,'other.' , 0         // 0 occurrence in user_likes_this_track...是否可以在不更改和添加额外表的情况下找到此解决方案的神奇查询?感谢大家抽出宝贵的时间。
查看完整描述

2 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

你可以使用类似的东西

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


查看完整回答
反对 回复 2023-08-19
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

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

;


查看完整回答
反对 回复 2023-08-19
  • 2 回答
  • 0 关注
  • 89 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信