-5

我的数据库是这样的:

users table
_id_____favorites_____
  1  |    -53-87-96   |
  2  |     -12-54-87  |

images table
_id_____url____________
  1  |    smile.jpg   |
  2  |    lol.jpg     |

我用分隔符“-”存储了收藏夹;这些收藏夹数字是图像 ID。当用户登录时,他们想查看自己的收藏夹。我该如何编写这个查询?

4

3 回答 3

3

收藏夹应通过一对多关系检索。收藏夹表应如下所示

id | favorite
---+---------
1  | 53
1  | 87
1  | 96
2  | 12
2  | 54
2  | 87 

那么你

select all from favorites where id = 1

或者任何 id 是什么。

于 2013-07-08T00:55:47.850 回答
1

永远,永远,永远不要在一列中存储多个值!

这会给你带来严重的问题,就像你的情况一样。你应该改变你的数据库结构。你可以添加一个最喜欢的表

favorites table
+--------+------------+
|user_id |favorite_id |
|  1     |  53        |
|  1     |  87        |
|  1     |  96        |
+--------+------------+
于 2013-07-08T00:56:14.770 回答
0

您当前的架构设计很糟糕,您应该将其正确规范化为 3 表设计。

用户表

  • 用户 ID (PK)
  • 用户名
  • 其他栏目...

图像表

  • 图像 ID (PK)
  • 图像链接
  • 其他栏目...

收藏夹表

  • 用户身份
  • 图片ID
  • 其他栏目...

无论如何,要回答你的问题,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
于 2013-07-08T01:00:05.450 回答