2015-05-12 3 views
1

У меня возникли проблемы с моим текущим поиском веб-сайта. Поэтому мой текущий поиск достигнет этого; пользовательские входы «crik», и он вернет «крикет» для поиска. Однако, если пользователь вводит «сверчки», он не возвращает «сверчок» для поиска. Как мне заставить это работать? мой текущий код php;Как выполнить полный текстовый поиск с помощью php pdo?

 $searchQ = $_GET['search']; 
     $ssss = $pdo->prepare('SELECT * FROM listing WHERE name LIKE :search');          
     $ssss->bindValue(':search', "%" . $searchQ . "%");   
     $ssss->execute(); 

Я также пробовал это, но он ничего не возвращал;

$ssss = $pdo->prepare('SELECT * FROM listing WHERE MATCH(name) AGAINST (:search IN BOOLEAN MODE) '); 
+0

' "SELECT * FROM список, где имя LIKE '%' +: поиск + '%'"' – xNeyte

+0

Какое хранилище двигатель имеет эту таблицу? И вы использовали полнотекстовый индекс? – sergio

+0

Ядро хранилища InnoDB, я думаю, и я не знаю, как использовать полный текстовый индекс. Извините, что я новичок в php – sw19

ответ

0

вы можете изменить строку поиска

$searchQ = $_GET['search']; 
$searchArr = str_split($searchQ); 
$searchQ_new = ""; 
foreach($searchArr as $alpha) 
{ 
     $searchQ_new .= $alpha . "%"; 
} 

Теперь вы можете использовать свой код для поиска с $ searchQ_new

0

Если вы хотите вход crickets, чтобы соответствовать имени cricket, вы можете использовать символы на колонке имя, а также, что-то вроде:

$ssss = $pdo->prepare("SELECT * FROM listing 
         WHERE name LIKE :search1 
         OR :search2 LIKE CONCAT('%', name, '%')"); 
$ssss->bindValue(':search1', '%' . $searchQ . '%'); 
$ssss->bindValue(':search2', $searchQ); 

Или короче и более последовательной (я не уверен, связывание ли будет работать таким образом, но вы можете попробовать):

$ssss = $pdo->prepare("SELECT * FROM listing 
         WHERE name LIKE CONCAT('%', :search, '%') 
         OR :search LIKE CONCAT('%', name, '%')"); 
$ssss->bindValue(':search', $searchQ); 
Смежные вопросы