使用LIKE将字符串与包含多个单词的字符串进行匹配

时间:2010-11-04 01:42:13

标签: php sql mysql sql-like

在mysql中,我有一个WHERE子句,它使用LIKE将关键字与字符串匹配。

WHERE title LIKE CONCAT('%',?,'%')

这几乎可行,但我遇到了一个问题,即有多个单词的标题会返回错误的匹配。例如,关键字“press”将与标题“抑郁糟透”相匹配 - 这不应该发生。

确保关键字仅在单词的开头处匹配时,最好的方法是什么?

先谢谢你的帮助

5 个答案:

答案 0 :(得分:4)

单词边界标记[[:<:]][[:>:]]是您的朋友。

mysql> SELECT 'a word a' REGEXP '[[:<:]]word[[:>:]]';   -> 1
mysql> SELECT 'a xword a' REGEXP '[[:<:]]word[[:>:]]';  -> 0

答案 1 :(得分:1)

WHERE title LIKE CAT(?, ' %')

%是通配符,所以如果你在前面和后面都有它,它会查找包含?的任何内容。如果你删除第一个%,它将是以?

开头的任何内容

答案 2 :(得分:1)

我认为您正在寻找MATCH而不是LIKE。通过适当的索引,MATCH也会更快。

以下是基础知识:http://dev.mysql.com/doc/refman/5.1/en/fulltext-search.html

答案 3 :(得分:0)

不熟悉mysql,但我在Oracle中使用了REGEXP_LIKE ... mysql似乎支持类似的东西......

http://dev.mysql.com/doc/refman/5.1/en/regexp.html

然后编写相应的正则表达式。

答案 4 :(得分:0)

WHERE title LIKE CONCAT('% ', ?, '%') OR title LIKE CONCAT(?, '%')

这样,查询将找到关键字,如果它是单词的开头或标题的开头。所以,如果关键字是'cat',它会找到电影:

catwoman
dogs and cats

但不是像以下那样的电影:

concatenation