关键字列的MYSQL REGEXP查询

关键字列的MYSQL REGEXP查询,mysql,regex,keyword-search,Mysql,Regex,Keyword Search,我需要一个正则表达式来获得只有关键字52的用户和有关键字52,53但没有关键字54的用户。以下是表格结构 CREATE TABLE `User` ( `id` int NOT NULL AUTO_INCREMENT, `first_name` varchar(100) NOT NULL, `last_name` varchar(100) NOT NULL, `keywords` text, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT

我需要一个正则表达式来获得只有关键字52的用户和有关键字52,53但没有关键字54的用户。以下是表格结构

CREATE TABLE `User` (
  `id` int NOT NULL AUTO_INCREMENT,
  `first_name` varchar(100) NOT NULL,
  `last_name` varchar(100) NOT NULL,
  `keywords` text,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Sample record1:  100, Sam, Thompson, "50,51,52,53,54"
Sample record2:  100, Wan, Thompson, "50,52,53"
Sample record3:  100, Kan, Thompson, "53,52,50,54"

50 = sports
51 = cricket
52 = soccer
53 = baseball
54 = tennis
到目前为止,这就是我提出的问题。它给出了所有3个参数的记录

SELECT * FROM `User` WHERE keywords REGEXP '[[:<:]]52,53,54[[:>:]]' 
从'User`WHERE keywords REGEXP'[[:::]]中选择*

尝试使用
FIND_IN_SET()
而不是复杂的正则表达式:

SELECT u.*
FROM User
WHERE text = '52' OR
    (FIND_IN_SET('52', text) > 0 AND FIND_IN_SET('53', text) > 0 AND
     FIND_IN_SET('54', text) = 0)
说明:

WHERE text = '52' -- users who have keyword 52 and only this keyword
WHERE FIND_IN_SET('52', text) > 0 AND FIND_IN_SET('53', text) > 0 AND
     FIND_IN_SET('54', text) = 0
                  -- users who have keywords 52 and 53 but not 54

尝试使用
FIND_IN_SET()
而不是复杂的正则表达式:

SELECT u.*
FROM User
WHERE text = '52' OR
    (FIND_IN_SET('52', text) > 0 AND FIND_IN_SET('53', text) > 0 AND
     FIND_IN_SET('54', text) = 0)
说明:

WHERE text = '52' -- users who have keyword 52 and only this keyword
WHERE FIND_IN_SET('52', text) > 0 AND FIND_IN_SET('53', text) > 0 AND
     FIND_IN_SET('54', text) = 0
                  -- users who have keywords 52 and 53 but not 54
编辑:对于记录:第二个查询实际上应该是
而不是像OP最初的想法那样像[[::]
,以防止匹配,比如说154

编辑:对于记录:第二个查询实际上应该是
而不是像OP最初的想法那样像[[::]
,以防止匹配,比如说154