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

Статус
В этой теме нельзя размещать новые ответы.

dig555

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

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

Я не уверен, что тут можно обойтись стандартными средствами MySQL. Скорее всего нужно курить в сторону регулярки, которую я абсолютно не знаю :confused:
 
SELECT * FROM domains WHERE domain NOT LIKE '%-%';
Это для дефисов средствами скуля , аналогично можно для всех цифр.
SELECT * FROM domains WHERE domain NOT LIKE '%-%' AND domain NOT LIKE '%1%';
Но думаю, что это не элегантное решение и найдуться получше.
 
Воспользуйся функцией locate()

PHP:
SELECT * FROM domains WHERE (locate('$search',domen)>0)
Смысл такой: если кол-во вхождений строки $search в поле domen больше 0 (т.е. оно вообще есть), то запись добавляется к остальным найденым записям.

Ну вместо $search подставляй дефисы цифры, а если и то и другое сделай 2 условия объеденив AND'ом
 
C дефисами разобрался. Спасибо всё работает.
Но цифры! Ведь их 10 :nezn:
Что десять запросов к базе делать? Или все цифры через OR в один длинный запрос?
 
WHERE domain NOT LIKE '%-%' AND domain NOT LIKE '%1%' AND domain NOT LIKE '%2%' AND domain NOT LIKE '%3%' и тд.
 
вместо NOT LIKE гараздо эффективнее тут использовать регулярное выражение - NOT REGEXP:

WHERE domain NOT REGEXP '[0-9-]'
 
Мне кажется мой вариант хоть и не притендует на звание самого красивого SQL-запроса, но за то должен быть самым быстрым :)
 
выполни разбивку через регулярки, пусть будет немного дольше запросы выполнять, зато результат будет удовлетворяющий. к примеру.
первый запрос обычный домен, второй с цифрами, 3 остальное
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху