我正在实现一个基于标签的搜索功能,我有以下 SQL 来匹配其中一个表中tags
列中的关键字。
例:
row 1 tags column: car city night
row 2 tags column: truck city day
.SQL:
WHERE MATCH(s.tags) AGAINST (+:keyword IN BOOLEAN MODE)
但是,如果用户搜索多个以空格分隔的关键字,例如"汽车城...",则查询应为:
WHERE MATCH(s.tags) AGAINST ('+:keyword1 +:keyword2 +...' IN BOOLEAN MODE)
目前我只有
$stmt->bindParam(":keyword", $keyword);
这不会产生我想要的,我相信它会产生:
WHERE MATCH(s.tags) AGAINST (+'keyword1 keyword2 ...' IN BOOLEAN MODE)
当关键字数量未知时,我将如何单独绑定每个关键字以生成该关键字?还是有别的办法?
我相信
我能够解决它。
使用单个占位符:
WHERE MATCH(s.tags) AGAINST (:keyword IN BOOLEAN MODE)
将关键字拆分为以空格分隔的单词数组:
$keywords = preg_split('/'s+/', $keyword);
$numKeywords = count($keywords);
然后在绑定参数时,将每个关键字与加号连接起来:
for ($i = 0; $i < $numKeywords; $i++){
$keywordBind .= "+".$keywords[$i]." ";
}
$stmt->bindParam(":keyword", $keywordBind);