За последние 24 часа нас посетили 16487 программистов и 1568 роботов. Сейчас ищут 927 программистов ...

Поисковый запрос

Тема в разделе "PHP и базы данных", создана пользователем SForce, 26 июн 2016.

  1. SForce

    SForce Новичок

    С нами с:
    26 июн 2016
    Сообщения:
    6
    Симпатии:
    0
    Здравствуйте, товарищи.
    Ситуация такая. Хочу сделать поиск ко каталогу продукции. К примеру человек ищет деталь с названием "АБВГД-73В-15-А". Но в базе она называется "АБВГД-73-В 15А". Так вот, деталь одна и та же, но если искать обычным LIKE%...% то ничего не найдется.
    Я решил выйти из положения следующим образом, но потом подумал реально ли это)
    Допустим А это ячейка строки в базе, Б - поисковый запрос. И в поиске (SQL-запросе) я буду сравнивать не А и Б, а:
    НЕКАЯ_ФУНКЦИЯ_УБИРАЮЩАЯ_ПРОБЕЛЫ_И_ДЕФИСЫ(А)
    и
    НЕКАЯ_ФУНКЦИЯ_УБИРАЮЩАЯ_ПРОБЕЛЫ_И_ДЕФИСЫ(Б)
    Тогда:
    "АБВГД-73В-15-А"
    и
    "АБВГД-73-В 15А"
    станут одним и тем же.
    Скажите, реально ли это сделать, и если да, то как. Заранее спасибо.
     
  2. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    а там только дефисы?

    PS это запчасти для чего то?
    --- Добавлено ---
    короче заведи в БД еще один столбец куда вписывай тоже название только без дефисов и пробелов и делай по нему поиск.
     
  3. SForce

    SForce Новичок

    С нами с:
    26 июн 2016
    Сообщения:
    6
    Симпатии:
    0
    Это электронные компоненты.
    Вот типовое название:
    РБН1-26-18Ш1-В
    Но его могут назвать:
    РБН1-26-18Ш1В
    РБН1 26 18Ш1 В
    РБН1-2618-Ш1В
    РБН-1-26-18-Ш-1-В
    И так далее, вариантов уйма. И как правило, пишут как попало.
     
  4. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
     
  5. SForce

    SForce Новичок

    С нами с:
    26 июн 2016
    Сообщения:
    6
    Симпатии:
    0
    Я не имею доступа к изменению базы
     
  6. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Боюсь, что у вас остаётся не так много выбора. Делайте два REPLACE для поля с удалением пробелов и дефисов. Пример
    Код (Text):
    1. SELECT * FROM
    2.   `tbl`
    3. WHERE
    4.   REPLACE(REPLACE(`model`, '-', ''), ' ', '') LIKE '%РБН12618Ш1В%';
    Оффтоп для модераторов. Подсветку бы для мускула...
     
  7. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    можно еще искать по регулярному выражению, но это извращение, хотя..