我有一个$ string变量,我使用
SELECT * FROM db WHERE description LIKE '%$string%' OR headline LIKE '%$string%'
如图所示,我想搜索两个字段“description”和“headline”以查看字符串变量是否与其中任何一个匹配。
问题是我希望它能匹配整个单词!!!
例如:如果描述包含“hello”,那么$ string是'h'就足够了。这不是我想要的。它必须只匹配整个单词!
我将查询字符串拆分为单词吗?或者什么?
答案 0 :(得分:13)
全文搜索的替代方法,可能就是使用REGEXP函数。
您的示例查询可能是:
SELECT *
FROM db
WHERE description REGEXP '[[:<:]]$string[[:>:]]' = 1
OR headline REGEXP '[[:<:]]$string[[:>:]]' = 1
答案 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');
这样可以通过相关性对结果进行排序。