如何比较逗号分隔字段与mysql中的列?

时间:2019-01-09 11:02:30

标签: mysql sql where-clause where-in find-in-set

我有什么?

用逗号分隔的字符串: $ str_states =“ 1,2”;

我有一个包含以下内容的表:

id event_name  states
1  ABC         1,4,5
2  PQR         1,2,3
3  XYZ         3,4,5

我想要什么:

id  event_name states
1   ABC        1
2   PQR        1,2

我尝试查询的内容:

SELECT id,event_name FROM events_table WHERE
FIND_IN_SET('1,2', states);

SELECT id,event_name FROM events_table WHERE
states IN ('51,58');

1 个答案:

答案 0 :(得分:0)

您无法真正按照自己的意愿使用FIND_IN_SETFIND_IN_SET针对CSV字符串搜索单个值。因此,您将必须在此处使用OR

SELECT id, event_name
FROM events_table
WHERE FIND_IN_SET('1', inLocationId) > 0 OR FIND_IN_SET('2', inLocationId) > 0;

如果输入的起点是1,2,那么您将必须在应用程序层中梳理各个值。

顺便说一句,在您的SQL表中存储CSV非规范化数据是不好的做法。与使用我的答案相比,您最好修复设计。

作为奖励,这是使用REGEXP编写查询的更简洁的方法:

SELECT id, event_name
FROM events_table
WHERE inLocationid REGEXP '[[:<:]](1|2)[[:>:]]';

但是,请再次修正您的数据模型。