我的数据库是这样的:
users table
_id_____favorites_____
1 | -53-87-96 |
2 | -12-54-87 |
images table
_id_____url____________
1 | smile.jpg |
2 | lol.jpg |
我用分隔符“-”存储了收藏夹;这些收藏夹数字是图像 ID。当用户登录时,他们想查看自己的收藏夹。我该如何编写这个查询?
我的数据库是这样的:
users table
_id_____favorites_____
1 | -53-87-96 |
2 | -12-54-87 |
images table
_id_____url____________
1 | smile.jpg |
2 | lol.jpg |
我用分隔符“-”存储了收藏夹;这些收藏夹数字是图像 ID。当用户登录时,他们想查看自己的收藏夹。我该如何编写这个查询?
收藏夹应通过一对多关系检索。收藏夹表应如下所示
id | favorite
---+---------
1 | 53
1 | 87
1 | 96
2 | 12
2 | 54
2 | 87
那么你
select all from favorites where id = 1
或者任何 id 是什么。
这会给你带来严重的问题,就像你的情况一样。你应该改变你的数据库结构。你可以添加一个最喜欢的表
favorites table
+--------+------------+
|user_id |favorite_id |
| 1 | 53 |
| 1 | 87 |
| 1 | 96 |
+--------+------------+
您当前的架构设计很糟糕,您应该将其正确规范化为 3 表设计。
用户表
图像表
收藏夹表
无论如何,要回答你的问题,MySQLFIND_IN_SET
会有所帮助,但你需要-
用,
using替换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