2016-03-16 33 views
0

我正在實現基於標籤的搜索功能,並且我有以下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) 

我怎麼會單獨綁定每個關鍵字產生時,有不明數量的關鍵字?還是有另一種方式?

回答

0

我相信我能解決它。

使用單一佔位符:

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);