我有一个$ 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
如果你想要完整的单词匹配,你应该考虑尝试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)
这具有通过相关性对结果进行排序的额外好处.
| 归档时间: |
|
| 查看次数: |
16006 次 |
| 最近记录: |