如何忽略SQL LIKE语句的非字母数字字符?

时间:2014-06-30 11:38:09

标签: php sql ajax

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

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

2 个答案:

答案 0 :(得分:1)

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

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

你可以看到这很麻烦。你可以通过存储一个" searchable"来简化它。数据库中标题的版本没有标点符号,然后删除用户输入的任何标点符号。

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

答案 1 :(得分:1)

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

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