2016-03-16 2 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) 

Split ключевое слово в массив слов, разделенных пробелами:

$keywords = preg_split('/\s+/', $keyword); 
$numKeywords = count($keywords); 

Затем, когда связывание параметра, конкатенации каждое ключевое слово со знаком плюс:

for ($i = 0; $i < $numKeywords; $i++){ 
    $keywordBind .= "+".$keywords[$i]." "; 
} 
$stmt->bindParam(":keyword", $keywordBind); 
Смежные вопросы