【问题标题】:mysql LIKE within two words in one columnmysql LIKE 在一列中的两个单词内
【发布时间】:2014-10-20 20:02:02
【问题描述】:

我有一个带有“名称”列的 mysql 表,其中名称是以 First Last 格式写入的(所以它被合并了)。我需要搜索 init(适当地使用 %LIKE% ),但我需要通过每个单词中的第一个字母来找到相似之处。通常,我只会使用 LIKE%,但它只会搜索名字,而不是姓氏......

请问有什么解决办法吗?

【问题讨论】:

  • 您想查找名字或姓氏以字母开头的名字吗?或者你需要匹配两个名字?
  • @FélixGagnon-Grenier 我认为initin it 的错字。而且全文搜索不能搜索单个字符。
  • @Barmar 好吧...我在 InnoDB 数据库上使用全文索引,并且现在肯定正在使用字母 a 进行搜索,并且搜索实际上只返回包含 a.. . 也许使用 MyISAM 你是对的?
  • @FélixGagnon-Grenier 我认为有一个最小字长设置,通常是 4。
  • @Barmar 你是对的electrictoolbox.com/mysql-full-text-index-word-length 我想我得感谢我的ISP :)

标签: php mysql where-clause sql-like


【解决方案1】:

这将查找名字或姓氏以A 开头的行:

WHERE name LIKE 'A%' OR name LIKE '% A%'

这将查找名字以A 开头且姓氏以B 开头的行:

WHERE name like 'A% B%'

如果你需要经常做这种事情,最好有单独的first_namelast_name字段。

【讨论】:

    【解决方案2】:

    MySQL 支持 REGEXP,但您不能总是依赖间距模式来确定名字的结束位置和姓氏的开始位置。然而,这将适用于 95% 或更好。

    但是,我建议编写一个脚本来重建您的表,将名称拆分为最后一列和第一列。

    【讨论】:

    • 谢谢你,我会试试 REGEXP,但我担心我需要拆分那张桌子,正如你所说..
    猜你喜欢
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 2013-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多