【问题标题】:How to ignore non alphanumeric characters for SQL LIKE statement?如何忽略 SQL LIKE 语句的非字母数字字符?
【发布时间】:2014-08-20 18:34:35
【问题描述】:

我有一个使用 ajax 的自动完成搜索框,它可以正常工作,但在查找内容时效率不高。我希望能够搜索某些东西而不需要逗号或冒号来实际返回正确的结果

例如如果我想要终结者 2:审判日并且我搜索终结者 2 审判日,它不会返回任何内容,因为我遗漏了冒号:。我不希望这种情况发生。由于它是一个 ajax 自动完成它很容易仍然可以找到它,但我希望能够找到东西而不需要非字母数字字符

【问题讨论】:

  • 您可能想查看全文搜索。

标签: php sql ajax


【解决方案1】:

对于输入 terminator 2 judgement day,搜索所有单词,而不是字符串:

title LIKE '%terminator%' AND title LIKE '%2%' AND title LIKE '%judgement%' AND title LIKE '%day%'

【讨论】:

  • 有没有更有效的方法来打破非字母数字字符上的字符串而不是空格?我知道我可以使用phpsexplode函数将字符串拆分为特定字符并从中创建一个数组但是有没有办法识别字符串是否包含一个字符并将其拆分到字符上而不知道它是什么是 1-z 或 0-9
  • preg_split() 有这个能力:preg_split('/[^[:alnum:]]+/', $str);
【解决方案2】:

如果您使用like 进行字符串搜索,那么您可以执行以下操作:

where replace(replace(replace(searchbox, ':', ''), ',', ''), '.') like
          replace(replace(replace(title, ':', ''), ',', ''), '.')    

如您所见,这相当麻烦。您可以通过在数据库中存储不带标点符号的“可搜索”版本的标题,然后删除用户输入的任何标点符号来简化它。

或者——这可能是更好的解决方案——使用全文搜索,记录在here。对于搜索框,这可能是您真正想要的。例如,它处理标点符号和部分匹配。

【讨论】:

    猜你喜欢
    • 2013-03-31
    • 1970-01-01
    • 2023-01-19
    • 2014-02-22
    • 1970-01-01
    • 2016-11-29
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    相关资源
    最近更新 更多