【问题标题】:MySQL - Like multiple parts of a stringMySQL - 就像字符串的多个部分
【发布时间】:2020-01-15 12:50:36
【问题描述】:

在 MySQL 中是否可以在匹配字符串任何部分的语句中执行“like”。

很难解释,但我可以举个例子。

我将两列连接在一起以显示全名(例如 John Barry Smith),名字是“John Barry”,姓氏是“Smith”

我正在制作一个过滤器,我希望它可以在其中输入 'John Smith' ,然后它将作为 where 子句中的 'like' (或类似的东西)传递,它会调出用户而不必键入“John Barry”,因为表中并非所有用户都有中间。

希望我的问题已经足够清楚了。

【问题讨论】:

  • 我建议实际上为名字、中间名和姓氏组件维护单独的列。失败了,如果你必须这样做,考虑阅读 MySQL 中的全文搜索。
  • 是的,不幸的是,在这种情况下,我无法对数据库进行更改。不过,我会研究 MySQL 全文搜索,谢谢!

标签: mysql codeigniter


【解决方案1】:

你可以这样做:

WHERE CONCAT(first_name,' ', last_name) LIKE ('john%smith')

列出所有“John sth sth Smith”

甚至LIKE ('%john%smith%') 列出所有“sth sth John sth sth Smith sth”(只需将所有空格替换为 %'s)

另一种选择是将搜索拆分为空格并对每个单词进行 LIKE 以列出 al Johns 和所有 Smiths,但我认为这无关紧要。

【讨论】:

  • 谢谢你,它帮助很大。不幸的是,在我正在使用的 codeigniter 项目中,我无法做到这一点。我通过了一个查询,where 子句是“喜欢?”然后它转换为'%?%'。可悲的是,如果我输入多个单词,它不会添加额外的通配符。
  • 在准备语句之前,您可以尝试用 % 替换变量中的空格,以便您喜欢传递以下值 "$queryValue = 'john%smith'; 不确定 Codeigniter 如何处理/准备语句时转义/去除字符串中的 %。
  • 是的,因为 search/select2 将在名称之间包含空格,我将在空间上爆炸并使用通配符构建一个字符串。非常感谢你的帮助! ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-26
  • 2011-03-10
  • 2012-02-14
  • 2016-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多