sforce
26.06.2016 - 11:28
Здравствуйте, товарищи.
Ситуация такая. Хочу сделать поиск ко каталогу продукции. К примеру человек ищет деталь с названием "АБВГД-73В-15-А". Но в базе она называется "АБВГД-73-В 15А". Так вот, деталь одна и та же, но если искать обычным LIKE%...% то ничего не найдется.
Я решил выйти из положения следующим образом, но потом подумал реально ли это)
Допустим А это ячейка строки в базе, Б - поисковый запрос. И в поиске (SQL-запросе) я буду сравнивать не А и Б, а:
НЕКАЯ_ФУНКЦИЯ_УБИРАЮЩАЯ_ПРОБЕЛЫ_И_ДЕФИСЫ(А)
и
НЕКАЯ_ФУНКЦИЯ_УБИРАЮЩАЯ_ПРОБЕЛЫ_И_ДЕФИСЫ(Б)
Тогда:
"АБВГД-73В-15-А"
и
"АБВГД-73-В 15А"
станут одним и тем же.
Скажите, реально ли это сделать, и если да, то как. Заранее спасибо.
arbuzmaster
26.06.2016 - 11:35
Т.е. Вы хотите тащить все записи из базы, конвертировать их *(убирать пробелы и дефисы), затем конвертировать запрос,а потом их сравнивать? Ведь есть например полнотекстовый поиск может,лучше воспользоваться им?
_____________
Мой первый сайтикПосмотри на свой XBMC под другим углом
redreem
26.06.2016 - 11:42
ну одно из возможный решений, конечно. но надо понимать, что это накладывает ограничение на формат названия. т.е.
1. наверняка оно будет состоять только из букв, цифр, минусов и пробелов.
2. названия не могут являться различными, только исходя из расположения минусов и пробелов. например: вдруг А1 и А-1 - это совершенно разные детали? хотя второй пункт в общем-то для поисковой выдачи не так критичен как первый.
sforce
26.06.2016 - 14:03
Цитата |
Т.е. Вы хотите тащить все записи из базы, конвертировать их *(убирать пробелы и дефисы), затем конвертировать запрос,а потом их сравнивать? Ведь есть например полнотекстовый поиск может,лучше воспользоваться им? |
Я так понял, что для работоспособности запроса должен существовать индекс таблицы товаров с типом FULLTEXT, но таково нет, и доступа к изменению базы я не имею.
Цитата |
ну одно из возможный решений, конечно. но надо понимать, что это накладывает ограничение на формат названия. т.е. 1. наверняка оно будет состоять только из букв, цифр, минусов и пробелов. |
Почему же? Ну будут, допустим, скобки, они же никуда не денутся. Просто это проблема, что где-то указываю через дефис, а где-то через пробел очень распространена в названиях в моей тематике.
Цитата |
2. названия не могут являться различными, только исходя из расположения минусов и пробелов. например: вдруг А1 и А-1 - это совершенно разные детали? |
Это очень маловероятно.
В итоге, мне придется делать количество SQL-запросов равное кол-ву строк в базе? Это не слишком сильная нагрузка? Строк порядка 50000.
redreem
29.06.2016 - 16:09
Цитата (sforce @ 26.06.2016 - 15:03) |
В итоге, мне придется делать количество SQL-запросов равное кол-ву строк в базе? |
откуда такой вывод?
inpost
29.06.2016 - 16:21
sforceНарушаем нормальную форму, создаём ещё 1 поле, которое содержит эту же строку без лишних разделительных символов. Далее поиск делать по этому полю и получишь результат. Конечно если тут не стоит у тебя задача исправлять ошибки пользователя и находить "похожие" результаты.
А вот, к примеру, если хочешь поиск делать с ошибками, тебе подойдет своя голова или что-то вроде
https://habrahabr.ru/company/sphinx/blog/61807/
_____________
Обучаю веб-программированию качественно и не дорого:
http://school-php.comФрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.