如何在mysql中查找每个单词的数据?
因此,如果我使用此代码如何在mysql中查找每个单词的数据?,mysql,Mysql,因此,如果我使用此代码SELECT*FROM user where BINARY LOWER(name)比如LOWER('%{$search}%')如果我搜索单词LEE,那么所有使用LEE的字母都会出现。 像SLEEP、LEEYONE、ULEE、LEEOPARD等。 更糟糕的是,如果我搜索字母“A”,一切都会出现 你只能做每一个字吗?也许如果我搜索单词LEE,它只会出现LEEYONE试试WHERE name REGEXP'[[::]]' 如果您的排序规则设置为合理的值,您也不需要LOWER()。
SELECT*FROM user where BINARY LOWER(name)比如LOWER('%{$search}%')
如果我搜索单词LEE,那么所有使用LEE的字母都会出现。
像SLEEP、LEEYONE、ULEE、LEEOPARD等。
更糟糕的是,如果我搜索字母“A”,一切都会出现
你只能做每一个字吗?也许如果我搜索单词LEE,它只会出现LEEYONE试试
WHERE name REGEXP'[[::]]'
如果您的排序规则设置为合理的值,您也不需要
LOWER()
。您的查询SELECT*来自用户,其中二进制LOWER(name)如LOWER('%{$search}%')
返回ULEE,因为存在通配符(%)围绕你的搜索词
如果将其更改为
SELECT*FROM user where BINARY LOWER(name)如LOWER(“{$search}”)
则对LEE的$search将只返回与LEE完全相同的条目
如果您还希望返回LEE,则需要将查询更改为
SELECT*FROM user where BINARY LOWER(name)如LOWER(“{$search}%”)
(请注意搜索词后面的%)Hi为此,您必须使用全文搜索
链接下面的活示例检查
请尝试以下查询
SELECT * FROM user where BINARY LOWER(name) LIKE LOWER('% {$search} %') OR LOWER(name) LIKE LOWER('{$search} %') OR LOWER(name) LIKE LOWER('% {$search}')
从用户中选择*,其中二进制低位(名称)如低位('{$search}%')或二进制低位(名称)如低位('%%{$search}')或二进制低位(名称)如低位('{$search}%')或二进制低位(名称)如低位('{$search}'))确切地说,为什么要明确使用
二进制
比较,然后将关键字和数据转换为小写,以获得不区分大小写的(=非二进制)比较,虽然完全消除了所有潜在的索引好处,并可以预见地降低了您在大型表中的性能,但您应该在$search变量的开头和结尾添加一个空格,如下所示:“$search=”“$搜索" ";` 然后在查询中使用此变量。或者您也可以在查询中添加空格,如下所示:SELECT*FROM user where BINARY LOWER(name)比如LOWER(“%$search}%”)
这是因为空格是分隔字符串中单词的元素。@ravendrappel和类似“this is a station with LEE.”的值呢?(注意后面的点)-或者只是一个简单的“LEE”@Franzgleichman我接受你的条件。所以在这种情况下,我们可以不这样使用:%[^.?]{$search}[^.?]%
?我在正则表达式中使用了点、问号和空格。可以添加更多字符。这也将返回“LEEOPARD”;哪个OP明确表示不想。。。