MYSQL匹配csv关键字列

时间:2016-02-24 06:54:46

标签: mysql sql regex csv

我在用户表中有以下方式记录

id    name     address    keywords
1     thompsan paris      10,20,30
2     samson   paris      10,20,30
3     Nilawa   paris      10,20,30
4     Nalama   paris      100,30,50
5     Nalama   paris      100,300,20

我需要获得关键字为10或20的用户。我写过这个查询:

SELECT * from User where keywords REGEXP '[[:<:]]10|20[[:>:]]' 

它没有给我预期的输出。它应该过滤id 10或20并给我记录1,2,3,5的输出。记录4在这里不匹配。

为什么不起作用?有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

试试这个,

SELECT  *
FROM    user
WHERE   FIND_IN_SET('10', keywords) > 0 OR
        FIND_IN_SET('20', keywords) > 0 

FIND_IN_SET是MySQL的内置函数

答案 1 :(得分:1)

重新设计您的数据库,使其实际上在1NF中,您不必处理这些令人头疼的问题,更不用说它可能带来的糟糕表现和错误

因为我知道你不会这样做,所以根本不需要使用REGEXP,假设keywords中的字符串实际上是一致的(如果然而,不管你是不是已经搞砸了。只需使用LIKE

SELECT  -- We'll list out the columns, since we NEVER use SELECT *
    id,
    name,
    address,
    keywords
FROM
    User
WHERE
    ',' + keywords + ',' LIKE '%,10,%' OR
    ',' + keywords + ',' LIKE '%,20,%'