我有一个PHP/mySQL搜索功能,使用值$ keywords_search中的一个或多个关键字。问题在于它与任何关键字匹配,这意味着如果搜索完成,则返回结果,如果有人搜索“牛奶啤酒”,结果可能包含“牛奶”或“啤酒”。如何更改它以便结果必须包含字符串中的所有关键字?我如何获得PHP/REGEXP匹配所有关键字,而不是任何?
以下是代码:
$query[] = "((a.name REGEXP '()*(" . str_replace(' ', ')*()*(', $keywords_search) . ")()*')
OR (a.description REGEXP '()*(" . str_replace(' ', ')*()*(', $keywords_search) . ")()*'))";
任何帮助,不胜感激!如果你能
$keywords = array('key', 'word');
$keywordQuery = [];
foreach ($keywords as $keyword) {
$keywordQuery[] = "((a.name REGEXP '()*({$keyword})()*') AND (a.description REGEXP '()*({$keyword})()*'))";
}
$query = implode(' AND ', $keywordQuery);
比正则表达式更好,你也可以使用MySQL的全文搜索 - Boolean Full-Text Searches:
如果'$ keywords_search'类似'a | b | c',可能不会起作用。即使只有一个关键字仍然可以匹配。 –
是的,这是问题所在。这个脚本前后有点复杂,其他的东西让我无法使用mySQL命令:( – user1227914
)你有没有研究过使用MySQL的全文搜索呢? –