【问题标题】:php mysql search query wildcard problemphp mysql 搜索查询通配符问题
【发布时间】:2010-09-12 00:38:02
【问题描述】:

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

这样的查询怎么写,不行

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

应该是什么?

【问题讨论】:

  • 我看到你不接受我的回答;出了什么问题?

标签: php mysql wildcard


【解决方案1】:

使用这个:

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

试试吧,它会起作用,而且太简单了,开头和结尾有 2 个空格。 其长而快速的查询。你也可以使用全文搜索、Concat、Regex……但对我来说,我喜欢简单,只需在 % 之前添加一些空格。

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

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

【讨论】:

    【解决方案2】:

    你可以使用REGEXP:

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

    【讨论】:

      【解决方案3】:

      您最好查看Full Text Search

      否则我认为你会被困在做这样的事情

      "select * from users WHERE CONCAT(' ',name, ' ') like '% LENA %'"
      

      这将非常低效,因为它需要全表扫描。

      【讨论】:

      • 全文搜索可以解决问题,但是您的“类似”查询将给出与原始结果相同的结果(但 CPU 开销更大)。
      • @Bob - 你是对的,我的查询存在问题,但不是你想的问题。我忘了你需要在 MySQL 中使用 CONCAT 而不是 + 进行字符串连接。连接空格的原因是 lena 是第一个、最后一个或唯一一个单词的名称不会匹配 where 子句 name like '% LENA %' 没有这个。
      • 在 MySQL 手册中查找了 '%',它也与 zero characters 匹配。这是我的逻辑缺陷。
      猜你喜欢
      • 1970-01-01
      • 2013-07-19
      • 1970-01-01
      • 1970-01-01
      • 2011-07-14
      • 2012-12-24
      • 2018-04-19
      • 1970-01-01
      • 2012-11-12
      相关资源
      最近更新 更多