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

fslejnso  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(452)

这个问题在这里已经有答案了

在数据库列中存储分隔列表真的那么糟糕吗(10个答案)
去年关门了。
我身上有什么?
逗号分隔的字符串:$str_states=“1,2”;
我有一张table,上面有:

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');
ig9co6j1

ig9co6j11#

你不能真的用 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)[[:>:]]';

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

相关问题