如何从数据库列中分解用户标识?

时间:2014-09-22 14:57:50

标签: mysql sql regex

我有一个表名消息。有一个列名receiver_id我需要获取记录 receiver_id = 4 ,但我总是得到空输出。

见我的表截图 -

enter image description here

上面的截图有3个。第二和第三行存在4以及我需要爆炸的其他ID,并显示第二和第三条记录。

如何编写MySQL查询?

2 个答案:

答案 0 :(得分:7)

存储逗号分隔值实际上是一个糟糕的设计,你首先应该 normalize 将接收器的所有关联存储在联结表中,如果你无法改变你的模式那么您目前的情况是,您可以使用find_in_set()在逗号分隔列表中搜索值

select * from table 
where find_in_set(4,receiver_id ) >0

答案 1 :(得分:1)

这也应该有效(SQL Fiddle):

SELECT * 
FROM messages
WHERE receiver_id LIKE '%,4,%'
   OR receiver_id LIKE '4,%'
   OR receiver_id LIKE '%,4'
   OR receiver_id = '4'

或使用正则表达式(SQL Fiddle):

SELECT * 
FROM messages
WHERE receiver_id REGEXP '4,|,4,|,4'
   OR receiver_id = '4'