mySql REGEXP中的逻辑AND运算符?

时间:2013-03-28 16:26:18

标签: mysql regex

我使用MySql REGEXP:

SELECT * FROM myTable
WHERE title REGEXP "dog|cat|mouse";

数据集很小,所以我不关心性能。而且我更喜欢使用LIKE表示法,因为我不必连接一堆“LIKE”语句。

但是,上述表示法使用逻辑OR运算符。是否有逻辑AND运算符,因此只有包含所有关键字的行匹配?

(我正在使用InnoDB所以全文搜索不是一个选项)

5 个答案:

答案 0 :(得分:12)

除了连接AND之外,没有什么好的解决方案:

SELECT * FROM myTable
WHERE title REGEXP "dog"
AND title REGEXP "cat"
AND title REGEXP "mouse"

正则表达式看起来像这样:

SELECT * FROM myTable
WHERE title REGEXP "(dog.*cat.*mouse)|(dog.*mouse.*cat)|(mouse.*dog.*cat)|(mouse.*cat.*dog)|(cat.*dog.*mouse)|(cat.*mouse.*dog)"

答案 1 :(得分:0)

AND操作只能由mysql-AND访问:

WHERE title REGEXP 'dog' AND title REGEXP 'cat' AND title REGEXP 'mouse'

这只会显示所有关键字都在标题字段中的条目。像

title = "this is about mouse, cat and dog"

答案 2 :(得分:0)

您可以在它们之间添加AND的几个条件:

SELECT * FROM myTable
WHERE title REGEXP "dog" AND title REGEXP "cat" AND title REGEXP "mouse";

这里可能没有必要使用REGEXP,你可以改用INSTR(常规速度通常较慢):

SELECT * FROM myTable
WHERE INSTR(title, "dog") AND INSTR(title, "cat") AND INSTR(title, "mouse");

答案 3 :(得分:0)

您可以在布尔模式下使用全文搜索:

SELECT * FROM table WHERE MATCH(colmun_name) AGAINST('+dogs +cat' IN BOOLEAN MODE);

您必须先将表编入索引:

ALTER TABLE table ADD FULLTEXT(column_name);

答案 4 :(得分:0)

如果标题包含所有搜索词,例如:

Anything mouse anything cat anything dog anything

然后,所有搜索词都将以任意顺序(例如狗,猫和老鼠)以三个重复的标题显示。

Anything mouse anything cat anything DOG anything

Anything mouse anything CAT anything dog anything

Anything MOUSE anything cat anything dog anything

因此,您可以在不将AND与以下各项串联的情况下进行操作:

SELECT * FROM myTable WHERE REPEAT(title,3) RLIKE '.*dog.*cat.*mouse.*';