Поиск по каждому слову, а не по полной строке с использованием MYSQL PHP

#php #mysql #string #search

#php #mysql #строка #Поиск

Вопрос:

Мой поиск позволяет пользователям искать игры в моей базе данных. Единственная проблема заключается в том, что если пользователь вводит несколько терминов в поиске, он получит хиты только в том случае, если эти несколько слов находятся рядом друг с другом.

Пример:

искомый термин = Вызов Duty Modern

результат = нет

НО если они вводят:

искомый термин = Call of Duty -или- Modern Warfare

результат = Call of Duty Modern Warfare 1/2/3 и т.д.

вот мой запрос mysql:

 $query = "SELECT ID, title FROM games WHERE title LIKE '%{$title}%' AND platform = :platform LIMIT $startFrom,15";
        $statement = $dbG->prepare($query);
        $statement->bindValue(':platform', $platform);
        $statement->execute();
        $gamesLike = $statement->fetch(PDO::FETCH_ASSOC);
  

Я знаю, что должен разбивать каждое слово и выполнять поиск по каждому термину, но я боюсь, что это съест всю скорость моих программ…

существуют ли какие-либо конкретные настройки запросов MYSQL, которые я могу использовать для достижения нужного мне результата?

Любые предложения будут с благодарностью

Спасибо за ваше время

Ответ №1:

полнотекстовый поиск отлично подходит для этого: http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

По сути, это превращает mysql в поисковую систему, которую вы используете match , и against для получения рейтинга того, как часто поисковые запросы отображаются в столбце, с которым вы сопоставляете. Он может обрабатывать частичные совпадения, множественные совпадения, исключает маленькие / общие слова для повышения производительности и позволяет использовать ключевые слова / символы поиска, такие как some -search will возвращать результаты, которые должны иметь some , но не могут иметь search .

Кроме того, его удивительно легко настроить, поскольку практически все, что вам нужно, работает по умолчанию.

Комментарии:

1. Вау, это именно то, что мне было нужно (и надеялся, что mysql есть) =)