我有一个表名消息。有一个列名receiver_id
我需要获取记录 receiver_id = 4 ,但我总是得到空输出。
见我的表截图 -
上面的截图有3个。第二和第三行存在4
以及我需要爆炸的其他ID,并显示第二和第三条记录。
如何编写MySQL查询?
答案 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'