[英]MySQL REGEXP search multiple words
Products.Name
字段名称包含PETISCO NESTLE PURINA DOG CHOW CARINHOS MIX DE FRUTAS
我需要搜索单词DOG
和单词NESTEL
(错误的单词),但是前三个字母是正确的。
我不知道单词的顺序。
我尝试过类似REGEXP '[^DOG][^NESTEL]{3}'
但是不起作用!
谢谢
更新1:
当用户键入DOG和NESTEL时,我希望我的应用程序显示包含DOG和NESTLE字样的所有产品,即使部分字样是错误的!
更新2:
where Products.Name REGEXP '[[:<:]]?=*NES.*[[:>:]]' and Products.Name REGEXP '[[:<:]]?=*DOG.*[[:>:]]'
这向我显示了狗E NES,但是如果用户键入NESTEL而不是NESTLE?
您需要mysql的levenshtein函数 。 它将根据与搜索到的单词(即NESTEL)的相似性对所有结果进行评估,然后将其与该额外比率字段一起返回。 然后,您只需要选择一个比率更高的列表,或者选择一个比率更高的列表...等等。
SELECT ...
FROM ...
WHERE Name REGEXP '[[:<:]]dog[[:>:]]'
AND Name REGEXP '[[:<:]]nes';
它不检查“ nes ...”中的6个字母,那是
AND Name REGEXP '[[:<:]]nes[az]{3}[[:>:]]';
可能存在排序规则问题; 请提供SHOW CREATE TABLE
。
迷你课程:
[^DOG]
说“匹配1个字节,但不匹配D
, O
或G
[^NESTEL]{3}
说完全匹配3个字节,但不能是这6个字母中的任何一个。 ?
NES.*[[:>:]]
与NES
匹配,后跟字符串的其余部分-这是因为*
为“贪心”,并且[[:>:]]
将匹配字符串的结尾。 nes***
作为正则表达式将表示ne
后跟任意数量的s
,包括零。 nes...
将匹配nes
加3种任何字节。 因此,所有内容都表明nes
不能太靠近字符串的结尾。 WHERE some_col LIKE '%dog%nes%' or some_col LIKE '%nes%dog%'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.