从存储为“ - ”的mysql中获取数据

时间:2013-07-08 00:52:30

标签: mysql

我的数据库是这样的:

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

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

我用分隔符“ - ”存储了收藏夹;这些收藏夹号码是图片ID。当用户登录时,他们想要查看他们的收藏夹。我该怎么写这个查询?

3 个答案:

答案 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表设计。

用户表

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

图片表

  • ImageID(PK)
  • ImageLink的
  • 其他栏目......

收藏夹表

  • 用户ID
  • 图像标识
  • 其他栏目......

无论如何,要回答您的问题,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