如何获取用户收藏夹的ID和名称。
表“用户”
id | name | favourites
----------------------
1 | Ian | 2,3
2 | Dave | 1
3 | Mike | 1,2
(注意:收藏夹是一个字符串。)
我尝试了以下操作,结果为零行:
SELECT id, name FROM users WHERE id IN (SELECT favourites FROM users WHERE id=1)
查询Ian(id 1)的收藏夹的结果应为
id | name
---------
2 | Dave
3 | Mike
感谢您的光临!
答案 0 :(得分:2)
请勿将逗号分隔的值用于ID的商店集合
但使用适当的标准化表
table users
id | name
-----------
1 | Ian
2 | Dave
3 | Mike
table favorites
id , id_user, id_favorite
1, 1, 2
2, 1, 3
3, 2, 1
4, 3, 1
5, 3, 2
select u.id, u.name
from users u
inner join favorites f on f.id_favorite = u.id
where f.id_user = 1
编辑
将逗号分隔的值存储在列中是一种反模式。它违反了第一个范式。
要直接回答所提出的问题:可以编写一个返回指定结果的MySQL查询。
MySQL提供了一个FIND_IN_SET
函数,该函数返回以逗号分隔的列表中找到的元素的位置。找不到元素时返回零。
我们可以做这样的事情:
SELECT f.id
, f.name
FROM users f
JOIN users u
ON FIND_IN_SET(f.id,u.favourites)
WHERE u.id = 1
ORDER
BY f.id
参考:https://dev.mysql.com/doc/refman/8.0/en/string-functions.html#function_find-in-set