Intereting Posts
Преобразование одномерного массива в многомерный связанный массив Проверка того, был ли ID изменен на стороне клиента перед обновлением базы данных Youtube Загрузка видео в php с использованием регулярного выражения Может ли PHP сказать, если сервер 64-битный? сообщение как страница на стене facebook drupal 7 пользовательская ошибка схемы datetime AJAX: Форма Отправить для комментариев Перенаправление на диалог проверки подлинности – «Произошла ошибка. Пожалуйста, повторите попытку позже" Динамические закладки бутстрапа с использованием PHP / MySQL Luracast Restler: возвращенные объекты «Именование» Сжатие с помощью Java Decompressing с помощью PHP PHP список всех файлов в каталоге Разрешение PHP mkdir Отказано в работе в Windows Server 2008 IIS 7 из-за атрибута только для чтения? Пользователь отправил CSV-файл для загрузки UTF-8 Проблема с загрузкой php iphone / IOS6: лучший способ сохранить повернутое изображение

Строка поиска MySQL с пробелами с использованием LIKE

Я создаю поиск на своем сайте, и я заметил, что он не работает, когда вы вводите более одного слова в поиск. Вот суть запроса:

SELECT * FROM `blog` WHERE `content` LIKE '%$keyword%' OR `title` LIKE '%$keyword%' ORDER BY `id` DESC 

Странным является то, что когда я проверяю запрос в phpMyAdmin, он возвращает ожидаемые результаты. Однако на моем сайте результатов не найдено.

Я попытался заменить пробелы в ключевом слове% s, но это ничего не изменило.

Проблема в том, что LIKE выполняет сопоставление шаблонов, а не поиск ключевых слов. Вы должны создать полнотекстовый указатель в столбцах базы данных и использовать WHERE MATCH keywords AGAINST column . Это будет правильно искать все ключевые слова в любом порядке и быть намного быстрее в любом случае.

Я просто попробовал это в своей базе данных, и использование LIKE в запросе более чем в 66 раз быстрее, чем использование MATCH с полнотекстовым индексом. Я использую две таблицы, которые «связаны» друг с другом. Один из них – это теги, а другой – продукты.

Так что я сделал то, что я добавил индекс полного текста в столбец тега в таблице тегов и выполнил совпадение с этим столбцом. Запрос, чем объединяет продукты, а затем выплевывает некоторые данные об элементе. Это заняло около 4 секунд с ~ 3000 продуктов и ~ 3000 тегов.

Затем я попробовал это, сначала взломав строку поиска пробелами, а затем взломал результат с помощью %' OR tags.tag LIKE '% . Это заняло около 0,06 секунды с таким же количеством продуктов и тегов.