我有什么?
用逗号分隔的字符串: $ 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');
答案 0 :(得分:0)
您无法真正按照自己的意愿使用FIND_IN_SET
。 FIND_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)[[:>:]]';
但是,请再次修正您的数据模型。