php mysql搜索查询通配符问题

php mysql搜索查询通配符问题,php,mysql,wildcard,Php,Mysql,Wildcard,如果我搜索LENA,我只想得到LENA是一个单词的结果,而不是像Lenason、Anna LENA或Malena这样的单词的一部分 我如何编写这样的查询,而不是 "select * from users where name like '%LENA%'" 它应该是什么?您可以使用REGEXP: SELECT fields FROM users WHERE name REGEXP '(^|\s+)LENA($|\s+)' 你最好调查一下 否则我想你会被困在这样的事情里 "select

如果我搜索LENA,我只想得到LENA是一个单词的结果,而不是像Lenason、Anna LENA或Malena这样的单词的一部分

我如何编写这样的查询,而不是

"select * from users where name like '%LENA%'"

它应该是什么?

您可以使用
REGEXP

SELECT fields 
  FROM users
 WHERE name REGEXP '(^|\s+)LENA($|\s+)'

你最好调查一下

否则我想你会被困在这样的事情里

"select * from users WHERE CONCAT(' ',name, ' ') like '% LENA %'"
这将是非常低效的,因为它需要一个完整的表扫描。

使用这个:

select * from users where name like '% LENA %' OR name like 'LENA %' OR name like '% LENA' OR name like 'LENA'
试试看,它会管用的,而且太简单了,开头和结尾都有两个空格。 这是一个长而快的查询。你也可以使用全文搜索,Concat,Regex。。。但对我来说,我喜欢简单,只需在%之前添加一些空格

但是,您可以尝试更短但较慢的查询:

SELECT * FROM users  WHERE name REGEXP '(^|\s+)LENA($|\s+)' 

我看你不接受我的回答;出了什么问题?全文搜索可以解决问题,但您的“类似”查询将给出与原始查询相同的结果(但cpu开销更大)。@Bob-您是对的,我的查询存在问题,但我认为不是您所想到的问题。我忘了在MySQL中需要使用
CONCAT
进行字符串连接,而不是
+
。连接空格的原因是
lena
是第一个、最后一个或唯一一个单词的名称与where子句
名称(如“%lena%”
)不匹配。在MySQL手册中查找“%”,它还匹配
零个字符。这就是我逻辑上的缺陷。