Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как правильно сделать поиск 
:(
    Опции темы
kulikoff
Дата 16.2.2011, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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

и т.д.

Буду премного благодарен за помощь
PM MAIL WWW ICQ Skype   Вверх
WolfAlone
Дата 16.2.2011, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В экстазе
***


Профиль
Группа: Завсегдатай
Сообщений: 1010
Регистрация: 16.9.2008
Где: Рай

Репутация: 1
Всего: 5



Думаю, что оптимально будет это выглядеть примерно так:
Код

SELECT * FROM price WHERE name LIKE "%Intel% %Core% %i5% %2300%"


Для этого, мы берём строку для поиска, которую ввёл пользователь, разбиваем её на отдельные слова, например с помощью функции: 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 наше фсё!

(с) Евгений Вольф
PM MAIL WWW ICQ Skype   Вверх
kulikoff
Дата 16.2.2011, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 334
Регистрация: 5.11.2005
Где: Киев

Репутация: нет
Всего: 1



Так вот вопрос в чем, не просто разбить на слова, а как исключить неважные символы (в данном случае в дефис, пробел, подчеркивание), ведь каждый пишет как-то по-своему, а чтоб товар искало необходимый
PM MAIL WWW ICQ Skype   Вверх
patap
Дата 16.2.2011, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 893
Регистрация: 7.5.2005
Где: Украина, Зп

Репутация: 26
Всего: 40



ну, как вариант, можно подготавливать строку для поиска, перед тем как ее в базу пихать, удаляя/заменяя проблемные символы


--------------------
На боку кобура болталась, сзади шашка отцовская звякала. 
Впереди меня все хохотало, а позади все плакало (с)
PM MAIL ICQ   Вверх
WolfAlone
Дата 16.2.2011, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В экстазе
***


Профиль
Группа: Завсегдатай
Сообщений: 1010
Регистрация: 16.9.2008
Где: Рай

Репутация: 1
Всего: 5



Ну тогда делаем так:

Прогоняем строку поиска через функцию: http://www.php.ru/manual/function.str-replace.html - 1-ый раз удаляем тире. Прогоняем второй раз, удаляем подчёркивание (символ "_"). Если нужно удалить ещё какой-то символ - прогоняем третий раз, и т.д. 
*То есть, не совсем удаляем, а заменяем на пробел.

Потом, с помощь explode() разбиваем строку на конкретные слова, задав в качестве разделителя слов " " (пробел). Получаем массив слов. Проходим по массиву, с помощью foreach и создаём из него строку, где каждое слово будет заключено между символами "%".

Вообще, вариантов масса, можно и с регулярными выражениями по извращаться. Я привожу лишь вариант, который мне приходит в голову первым.

Добавлено через 2 минуты и 7 секунд
Да, ещё там не плохо было бы удалить пустые значения из массива, при использовании функции explode(), т.к. пользователь может лишних пробелов натыкать в строку и получатся слова длиной в 0 символов, что не есть хорошо!


--------------------
И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!"

Ф топку Ubuntu, Debian наше фсё!

(с) Евгений Вольф
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0692 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.