mysql SELECT LIKE必须只对整个单词匹配变量

时间:2009-10-14 18:16:55

标签: php mysql

我有一个$ string变量,我使用

 SELECT * FROM db WHERE description LIKE '%$string%' OR headline LIKE '%$string%'

如图所示,我想搜索两个字段“description”和“headline”以查看字符串变量是否与其中任何一个匹配。

问题是我希望它能匹配整个单词!!!

例如:如果描述包含“hello”,那么$ string是'h'就足够了。这不是我想要的。它必须只匹配整个单词!

我将查询字符串拆分为单词吗?或者什么?

2 个答案:

答案 0 :(得分:13)

全文搜索的替代方法,可能就是使用REGEXP函数。

您的示例查询可能是:

SELECT *
  FROM db
 WHERE description REGEXP '[[:<:]]$string[[:>:]]' = 1
    OR headline REGEXP '[[:<:]]$string[[:>:]]' = 1

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

答案 1 :(得分:9)

如果你想要完整的单词匹配,你应该考虑尝试FULLTEXT搜索。一个先决条件是您的表必须使用MyISAM引擎:

CREATE TABLE test (
  id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  headline VARCHAR(120) NOT NULL,
  description VARCHAR(255) NOT NULL,
  FULLTEXT(headline, description)
) ENGINE=MyISAM;

您可以查询匹配项:

SELECT *
FROM test
WHERE MATCH (headline,description) AGAINST('$string');

这样可以通过相关性对结果进行排序。