| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Как правильно сделать поиск |
| Автор: kulikoff 16.2.2011, 17:13 |
| Добрый день! Помогите реализовать поиск по заданному полю в базе данных. Проблема вот в чем: Есть запись в поле, скажем "Intel Core i5-2300". Как сделать так, чтоб оно находилу эту запись, если человек ввел в поле поиска 1. Intel Core i5-2300 2. Intel Core i5 2300 3. Intel Core i5_2300 4. Intel Socket 775 Core i5-2300 и т.д. Буду премного благодарен за помощь |
| Автор: WolfAlone 16.2.2011, 17:25 | ||
Думаю, что оптимально будет это выглядеть примерно так:
Для этого, мы берём строку для поиска, которую ввёл пользователь, разбиваем её на отдельные слова, например с помощью функции: explode() (http://www.php.ru/manual/function.explode.html), и генерируем запрос по образцу выше. P.S. Привожу пример как один из вариантов решения проблемы, без претензий на "панацею" и/или 100% решение. Добавлено через 4 минуты и 19 секунд Если Вам нужно искать совпадение хотя бы с одним из слов, можно между %слово% вставить оператор OR, тогда он будет искать хотя бы одно вхождение. Ещё можно посмотреть вот это: http://www.mysql.ru/docs/man/Fulltext_Search.html - полнотекстовый поиск в MySQL (возможно, как "вариант №2") |
| Автор: kulikoff 16.2.2011, 17:33 |
| Так вот вопрос в чем, не просто разбить на слова, а как исключить неважные символы (в данном случае в дефис, пробел, подчеркивание), ведь каждый пишет как-то по-своему, а чтоб товар искало необходимый |
| Автор: patap 16.2.2011, 17:44 |
| ну, как вариант, можно подготавливать строку для поиска, перед тем как ее в базу пихать, удаляя/заменяя проблемные символы |
| Автор: WolfAlone 16.2.2011, 17:47 |
| Ну тогда делаем так: Прогоняем строку поиска через функцию: http://www.php.ru/manual/function.str-replace.html - 1-ый раз удаляем тире. Прогоняем второй раз, удаляем подчёркивание (символ "_"). Если нужно удалить ещё какой-то символ - прогоняем третий раз, и т.д. *То есть, не совсем удаляем, а заменяем на пробел. Потом, с помощь explode() разбиваем строку на конкретные слова, задав в качестве разделителя слов " " (пробел). Получаем массив слов. Проходим по массиву, с помощью foreach и создаём из него строку, где каждое слово будет заключено между символами "%". Вообще, вариантов масса, можно и с регулярными выражениями по извращаться. Я привожу лишь вариант, который мне приходит в голову первым. Добавлено через 2 минуты и 7 секунд Да, ещё там не плохо было бы удалить пустые значения из массива, при использовании функции explode(), т.к. пользователь может лишних пробелов натыкать в строку и получатся слова длиной в 0 символов, что не есть хорошо! |