Поиск точного вхождения слова
Если поле таблицы имеет индекс FULLTEXT то главное правильно составить запрос. В php у меня вышло так:
<?php
$query = trim($_POST['query']);//Запрос например "скачать mp3"
$stop_words = trim($_POST['stop_words']);//Стоп слова через запятую(если нужно что то отсеять)
$exact_match = trim($_POST['exact_match']);//yes, no, или пусто
if($_POST['stop_words'] !== ""){//если присутствуют стоп слова то добовляем знак - к каждому
$words = explode(",", $stop_words);
foreach($words as $word){
$search_minus .= " -".$word;
}
}
if($exact_match == "yes"){//$exact_match == "yes" то берем запрос в кавычки, ищет точное вхождение "скачать mp3"
$search_plus = "\"$query\"";
} elseif($exact_match == "no"){//$exact_match == "no" то оставим как есть, ищет любое из слов "скачать" или "mp3"
$search_plus = $query;
}
else{//$exact_match == "" то добавим знак + к каждому слову из запроса, ищет и "скачать" и "mp3"
$words = explode(" ", $query);
foreach($words as $word){
$search_plus .= " +".$word;
}
}
$search = $search_plus.$search_minus;//соберем все до кучи
$search = trim($search);//лишние пробелы наh***
$q = mysql_query("SELECT * FROM `keys` WHERE MATCH(`keyword`) AGAINST('$search' IN BOOLEAN MODE)");//делаем запрос к базе данных
while($row = mysql_fetch_array($q)){//выводим результат на экран
$key = $row['keyword'];
if(str_count_word($key) > $count){
echo $key.'
';
}
}
?>
В запросе также можно использовать оператор усечения. Например: сигнал* будет найдено сигнал, сигнальный, сигнализация и т.д.
Комментарии:
Нету комментариев для вывода...