【发布时间】:2020-11-12 09:05:01
【问题描述】:
音乐网站数据库中的 3 个表:
用户(用户ID、姓名、密码)
曲目(track_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';
如果用户喜欢这首歌,喜欢将为 1,如果不喜欢,则为 0
但是,问题是当他搜索一个包含他可能喜欢或不喜欢的曲目的搜索过滤列表时。
从用户的角度,我试图获得track_id、track_title、赞的组合从搜索结果甚至所有曲目中获取类似:
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
...
是否可以在不更改和添加额外表的情况下为该解决方案找到一个神奇的查询?
感谢大家的宝贵时间。
【问题讨论】:
-
您的意思是您只想要用户以一种或另一种方式表达偏好的曲目列表吗?那肯定是
select * from user_likes_this_track left join track on track_id = id where user_id = your user或类似的吗?这将给出他们喜欢或不喜欢的所有曲目。 -
@droopsnoot 是的,还有他不喜欢的那些都显示偏好状态..但是你的代码只显示偏好..
-
我很感激,谢谢很多人的回答都有效.. 但我看到两种方法都使用两种状态方法.. 这不是 count() 函数吗?
-
我想我误解了“喜欢”表的结构。出于某种原因,我决定如果用户喜欢该曲目,它会写一个“1”,如果他们不喜欢该曲目,它会写一个“0”,任何不在表格中的都是用户拥有的没有意见。您的结构似乎是,如果用户在“喜欢”表中有一个条目,他们喜欢该曲目,但如果他们没有,则您假设相反。我上面的查询不会为此做任何事情,你说得很对。我必须更详细地阅读这些内容。