2014-09-22 61 views
0

我有一个表名消息。有一个列名receiver_id我需要取记录receiver_id = 4但我总是得到空输出。如何从数据库列中分解用户标识?

见我的表Screenshot-

enter image description here

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

如何编写MySQL查询?

+2

不要将数据存储为以逗号分隔的字符串。对于你的问题,在mysql中检出find_in_set函数。 – 2014-09-22 15:00:24

+0

@AbhikChakraborty这find_in_set()不工作在CakePHP我得到'错误:调用未定义的函数find_in_set()'如何解决这个问题? – Developer 2014-09-23 06:00:11

回答

7

存储逗号分隔值实在是一个糟糕的设计,你应该normalize它首先通过存储接收的所有协会在结合表,如果你无法改变你的模式则当前的情况下,你可以使用find_in_set()来在一个逗号搜索值分隔的列表

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

我很乐意第二次为合理的建议upvote *存储逗号分隔值是一个非常糟糕的设计*。 – VMai 2014-09-22 15:03:22

+0

在这种情况下,接收器44对find_in_set(4,receiver_id)也会返回正值':( – LHristov 2014-09-22 15:20:23

+0

这个find_in_set()在CakePHP中不起作用,我得到了'Error:调用未定义的函数find_in_set() File:E:\ xampp \ hdocs \ 2014 \ profect \ app \ Controller \ MessagesController.php Line:24'如何解决这个问题? – Developer 2014-09-23 05:58:50

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' 
+0

youforgot'case_id = 4'的情况 - 如果'4'是唯一的值,那么你的查询将失败。 – 2014-09-22 15:06:39

+1

** @ Marc B **,修复了查询,但是** K哈立德Junaid **答案显然更好/更简单。 – Linger 2014-09-22 15:15:28

相关问题