![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
kulikoff |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 334 Регистрация: 5.11.2005 Где: Киев Репутация: нет Всего: 1 |
Добрый день! Помогите реализовать поиск по заданному полю в базе данных. Проблема вот в чем:
Есть запись в поле, скажем "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 |
|
|||
![]() В экстазе ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1010 Регистрация: 16.9.2008 Где: Рай Репутация: 1 Всего: 5 |
Думаю, что оптимально будет это выглядеть примерно так:
Для этого, мы берём строку для поиска, которую ввёл пользователь, разбиваем её на отдельные слова, например с помощью функции: 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") -------------------- И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!" Ф топку Ubuntu, Debian наше фсё! (с) Евгений Вольф |
|||
|
||||
kulikoff |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 334 Регистрация: 5.11.2005 Где: Киев Репутация: нет Всего: 1 |
Так вот вопрос в чем, не просто разбить на слова, а как исключить неважные символы (в данном случае в дефис, пробел, подчеркивание), ведь каждый пишет как-то по-своему, а чтоб товар искало необходимый
|
|||
|
||||
patap |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 893 Регистрация: 7.5.2005 Где: Украина, Зп Репутация: 26 Всего: 40 |
ну, как вариант, можно подготавливать строку для поиска, перед тем как ее в базу пихать, удаляя/заменяя проблемные символы
-------------------- На боку кобура болталась, сзади шашка отцовская звякала. Впереди меня все хохотало, а позади все плакало (с) |
|||
|
||||
WolfAlone |
|
|||
![]() В экстазе ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1010 Регистрация: 16.9.2008 Где: Рай Репутация: 1 Всего: 5 |
Ну тогда делаем так:
Прогоняем строку поиска через функцию: http://www.php.ru/manual/function.str-replace.html - 1-ый раз удаляем тире. Прогоняем второй раз, удаляем подчёркивание (символ "_"). Если нужно удалить ещё какой-то символ - прогоняем третий раз, и т.д. *То есть, не совсем удаляем, а заменяем на пробел. Потом, с помощь explode() разбиваем строку на конкретные слова, задав в качестве разделителя слов " " (пробел). Получаем массив слов. Проходим по массиву, с помощью foreach и создаём из него строку, где каждое слово будет заключено между символами "%". Вообще, вариантов масса, можно и с регулярными выражениями по извращаться. Я привожу лишь вариант, который мне приходит в голову первым. Добавлено через 2 минуты и 7 секунд Да, ещё там не плохо было бы удалить пустые значения из массива, при использовании функции explode(), т.к. пользователь может лишних пробелов натыкать в строку и получатся слова длиной в 0 символов, что не есть хорошо! -------------------- И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!" Ф топку Ubuntu, Debian наше фсё! (с) Евгений Вольф |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |