字段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?
答案 0 :(得分:0)
你需要mys {的levenshtein function。它根据它与搜索词(即NESTEL)的相似性来评估它们的所有结果,并将它们与该额外比率字段一起返回。然后你只需要选择比率更高的那个,或者选择更相似的那个......等等。
答案 1 :(得分:0)
SELECT ...
FROM ...
WHERE Name REGEXP '[[:<:]]dog[[:>:]]'
AND Name REGEXP '[[:<:]]nes';
它不检查&#34; nes ...&#34;中的6个字母,那将是
AND Name REGEXP '[[:<:]]nes[a-z]{3}[[:>:]]';
可能是整理问题;请提供SHOW CREATE TABLE
。
迷你课:
[^DOG]
说&#34;匹配1个字节,但不是D
,也不是O
,也不是G
。[^NESTEL]{3}
表示匹配3个字节,但它们不能是这6个字母中的任何一个。?
NES.*[[:>:]]
匹配NES
,后跟字符串的其余部分 - 这是因为*
是&#34;贪心&#34;并且[[:>:]]
将匹配字符串的结尾。nes***
作为正则表达式会说ne
后跟任意数量的s
,包括零。nes...
将匹配nes
加上任意类型的3个字节。所以,它只是说nes
不能太靠近字符串的末尾。答案 2 :(得分:-1)
WHERE some_col LIKE '%dog%nes%' or some_col LIKE '%nes%dog%'