在逗号分隔值中搜索逗号分隔选项

时间:2019-05-25 15:38:23

标签: php mysql laravel

我有一些用户表,其中包含city_id列,在此列中,城市ID以逗号分隔的形式存储,如下所示:

user_id  user_name     city_id    
1        abc1           1,2,3
2        abc2           15,2,9
3        abc5           1,2,13

现在,我要从city_id列中搜索包含城市ID = 1,9,13的行。

如何做到?

预期的输出量:

abc, abc1, abc3

1 个答案:

答案 0 :(得分:2)

您应该避免像目前那样将CSV数据存储在city_id列中。理想情况下,一条记录应仅包含city_id的一个数据点。话虽这么说,MySQL提供的功能FIND_IN_SET至少可以处理CSV数据。尝试以下查询:

SELECT user_name
FROM yourTable
WHERE
    FIND_IN_SET('1', city_id) > 0 OR
    FIND_IN_SET('9', city_id) > 0 OR
    FIND_IN_SET('13', city_id) > 0;

我们可以通过将REGEXP与正则表达式交替使用\b(1|9|13)\b来使查询更加紧密:

SELECT user_name
FROM yourTable
WHERE city_id REGEXP '[[:<:]](1|9|13)[[:>:]]';
相关问题