我有一個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的全文搜索呢? –