PHP+MySQL:выборка по маске

Тема в разделе "PHP", создана пользователем dig555, 2 авг 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. dig555

    dig555

    Регистр.:
    22 июн 2007
    Сообщения:
    363
    Симпатии:
    148
    Есть у меня в базе MySQL, одна таблица с полем domains.
    В ней, как несложно догадаться, домены в виде domen.com
    Некоторые из доменов содержат в себе знаки дефиса, некоторые цифры.
    Подскажите, пожалуйста, как лучше организовать выборку из таблицы:

    1). Всех доменов без дефисов.
    2). Всех доменов без цифр.
    3). Всех доменов без дефисов и цифр.

    Я не уверен, что тут можно обойтись стандартными средствами MySQL. Скорее всего нужно курить в сторону регулярки, которую я абсолютно не знаю :confused:
     
  2. itex

    itex

    Регистр.:
    15 ноя 2007
    Сообщения:
    274
    Симпатии:
    64
    SELECT * FROM domains WHERE domain NOT LIKE '%-%';
    Это для дефисов средствами скуля , аналогично можно для всех цифр.
    SELECT * FROM domains WHERE domain NOT LIKE '%-%' AND domain NOT LIKE '%1%';
    Но думаю, что это не элегантное решение и найдуться получше.
     
    dig555 нравится это.
  3. the_stalker

    the_stalker Постоялец

    Регистр.:
    19 фев 2007
    Сообщения:
    116
    Симпатии:
    3
    Воспользуйся функцией locate()

    PHP:
    SELECT FROM domains WHERE (locate('$search',domen)>0)


    Смысл такой: если кол-во вхождений строки $search в поле domen больше 0 (т.е. оно вообще есть), то запись добавляется к остальным найденым записям.

    Ну вместо $search подставляй дефисы цифры, а если и то и другое сделай 2 условия объеденив AND'ом
     
    dig555 нравится это.
  4. dig555

    dig555

    Регистр.:
    22 июн 2007
    Сообщения:
    363
    Симпатии:
    148
    C дефисами разобрался. Спасибо всё работает.
    Но цифры! Ведь их 10 :nezn:
    Что десять запросов к базе делать? Или все цифры через OR в один длинный запрос?
     
  5. itex

    itex

    Регистр.:
    15 ноя 2007
    Сообщения:
    274
    Симпатии:
    64
    WHERE domain NOT LIKE '%-%' AND domain NOT LIKE '%1%' AND domain NOT LIKE '%2%' AND domain NOT LIKE '%3%' и тд.
     
  6. X-Ception

    X-Ception Прохожие

    вместо NOT LIKE гараздо эффективнее тут использовать регулярное выражение - NOT REGEXP:

    WHERE domain NOT REGEXP '[0-9-]'
     
  7. the_stalker

    the_stalker Постоялец

    Регистр.:
    19 фев 2007
    Сообщения:
    116
    Симпатии:
    3
    Мне кажется мой вариант хоть и не притендует на звание самого красивого SQL-запроса, но за то должен быть самым быстрым :)
     
  8. Miraage

    Miraage Angular/Laravel

    Регистр.:
    3 июн 2008
    Сообщения:
    230
    Симпатии:
    51
    выполни разбивку через регулярки, пусть будет немного дольше запросы выполнять, зато результат будет удовлетворяющий. к примеру.
    первый запрос обычный домен, второй с цифрами, 3 остальное
     
Статус темы:
Закрыта.