我的数据库是这样的:
users table
_id_____favorites_____
1 | -53-87-96 |
2 | -12-54-87 |
images table
_id_____url____________
1 | smile.jpg |
2 | lol.jpg |
我用分隔符“ - ”存储了收藏夹;这些收藏夹号码是图片ID。当用户登录时,他们想要查看他们的收藏夹。我该怎么写这个查询?
答案 0 :(得分:3)
应通过一对多关系检索收藏夹。收藏夹表应该看起来像
id | favorite
---+---------
1 | 53
1 | 87
1 | 96
2 | 12
2 | 54
2 | 87
然后你
select all from favorites where id = 1
或者无论身份是什么。
答案 1 :(得分:1)
这会给你带来严重的问题,比如你的情况。您应该更改数据库结构。你可以添加一个喜欢的表
favorites table
+--------+------------+
|user_id |favorite_id |
| 1 | 53 |
| 1 | 87 |
| 1 | 96 |
+--------+------------+
答案 2 :(得分:0)
您当前的架构设计很糟糕,您应该将其正确地规范化为3表设计。
用户表
图片表
收藏夹表
无论如何,要回答您的问题,MySQL的FIND_IN_SET
会有所帮助,但您需要使用-
将,
替换为REPLACE()
。
SELECT a.ID,
b.url
FROM users a
INNER JOIN images b
ON FIND_IN_SET(b.id, REPLACE(a.favorites, '-', ',')) > 0
WHERE a.ID = 1