【问题标题】:Add wildcard inside CONCAT in mysql在 mysql 的 CONCAT 中添加通配符
【发布时间】:2016-12-06 02:32:50
【问题描述】:

我想搜索三个字段:id、name 和 address。我希望我的搜索更智能。

订阅者表

id         |     firstname     |      lastname     |     address
N29-0001   |     John          |      Doe          |     California
N29-0002   |     Jonathan      |      Morson       |     Miami

到目前为止我的查询

select subscriberid, CONCAT(firstname," ",lastname) as fullname, address, city from subscriber where id like "%N29 Joh%" or CONCAT(firstname," ",lastname) like "%N29 Joh%" or address like "%N29 Joh%" or city like "%N29 Joh%"

如果我输入 N29 Joh,我希望我的查询进行搜索,它将搜索 John Doe。

【问题讨论】:

  • 我认为你应该调查全文索引。

标签: mysql wildcard concat


【解决方案1】:

您可能需要全文索引。但是,如果你想匹配任何单词并且不关心性能,你可以使用正则表达式:

select subscriberid, CONCAT(firstname, ' ', lastname) as fullname,
       address, city
from subscriber
where subscriberid regexp 'N29|Joh' or
      concat(firstname, ' ', lastname) like 'N29|Joh' or
      address like 'N29|Joh' or
      city like 'N29|Joh';

【讨论】:

  • 我尝试了全文索引,但它有一个错误,这是我的查询:SELECT * FROM subscriber WHERE MATCH(id,firstname,lastname,address) AGAINST ('N29' IN NATURAL LANGUAGE MODE);错误是找不到与列列表匹配的 FULLTEXT 索引。
  • 我的表中应该有 FULLTEXT 字段,对吗?
  • 是的。 . . dev.mysql.com/doc/refman/5.7/en/fulltext-search.html。并且您需要将最小字长设置为正确的值。
猜你喜欢
  • 1970-01-01
  • 2012-10-03
  • 2017-06-10
  • 1970-01-01
  • 2011-08-29
  • 2016-09-02
  • 2019-05-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多