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

5 php mysql

我有一个$ string变量,我用

 SELECT * FROM db WHERE description LIKE '%$string%' OR headline LIKE '%$string%'
Run Code Online (Sandbox Code Playgroud)

如图所示,我想搜索两个字段"description"和"headline"以查看字符串变量是否与它们中的任何一个匹配.

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

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

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

mar*_*ton 13

全文搜索的替代方案可能就是使用REGEXP功能.

您的示例查询可能是:

SELECT *
  FROM db
 WHERE description REGEXP '[[:<:]]$string[[:>:]]' = 1
    OR headline REGEXP '[[:<:]]$string[[:>:]]' = 1
Run Code Online (Sandbox Code Playgroud)

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

  • 请注意,对于较大的数据集,"REGEXP"效率非常低,因为MySQL无法利用索引. (2认同)

Cor*_*lou 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;
Run Code Online (Sandbox Code Playgroud)

您可以像这样查询匹配:

SELECT *
FROM test
WHERE MATCH (headline,description) AGAINST('$string');
Run Code Online (Sandbox Code Playgroud)

这具有通过相关性对结果进行排序的额外好处.

  • 请注意,全文搜索不适用于短字(<4个字符)或带空格的短语 (2认同)