За последние 24 часа нас посетили 17905 программистов и 1617 роботов. Сейчас ищут 1249 программистов ...

Регулярные выражения MySQL

Тема в разделе "Регулярные выражения", создана пользователем mkramer, 26 июл 2012.

  1. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.589
    Симпатии:
    1.763
    Встала такая задача. Есть база данных существующего интернет-магазина (движок Web Asyst Shop Script) с шинами, и там в поле name_ru содержатся шины со всеми своими параметрами (в цепочке к заказчику я не успел рассказать, что параметры следует хранить в других таблицах). Теперь нужно организовать фильтр по нескольким параметрам именно по этому полю. Выглядят поля примерно так:
    Код (Text):
    1. Шины Barum Norpolaris 185/70R14 88Q
    , собственно, часть строки, которую мне нужно отфильтровать - это 185/70R14.

    Пока дело не доходит до того, что стоит за буквой R, в принципе, справляется такое условие в запросе: SC_products.name_ru RLIKE '.*[:digit:]*/[:digit:]*R?[:digit:]*.*'. Соответственно, некоторые части условия заменяются на нужный параметр, к примеру SC_products.name_ru RLIKE '.*165/[:digit:]*R?[:digit:]*.*' или SC_products.name_ru RLIKE '.*[:digit:]*/70R?[:digit:]*.*'. Но вот стоит задать к примеру так: SC_products.name_ru RLIKE '.*[:digit:]*/[:digit:]*R?14.*', и MySQL возвращает пустой результат. Можно ли как-то сделать, чтоб срабатывали все части этого шаблона?

    Пока нашёл временное решение, убрав из шаблона для MySQL часть с R?[:digit:]* и отметая ненужные мне значения после выполнения SQL-запроса средствами PHP, но мне это не совсем нравится, хоть и работает.

    P.S. Знаю, что не лучшая организация базы данных, не надо мне об этом писать ещё раз. Проблема в том, что из-за того, что я не контактирую с заказчиком напрямую, он уже поспешил наполнить базу данных таким вот образом :(
     
  2. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Синтаксис неправильный: '[[:digit:]]+/[[:digit:]]+R?14'
    + - если цифры должны быть обязательно;
    * - могут и не быть
     
  3. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.589
    Симпатии:
    1.763
    Благодарю. Тему можно закрывать.
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.589
    Симпатии:
    1.763
    Ещё один вопрос: как в регулярках MySQL подставлять специальные символы, такие как '*' bkb '.', если именно они должны быть обнаружены в тексте?
     
  5. Chushkin

    Chushkin Активный пользователь

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Как обычно: "\.\*"