Интересная выборка телефонов.

klax

Новичок
Интересная выборка телефонов.

Такой вопросик...
есть таблица вида
id phone
1 9105729276
2 (495) 651-67-32
3 495 437 27 37

Так вот. Как мне выбрать строки, в которых присутствуют цифры 73.
А в ответе получить
2 (495) 651-67-32
3 495 437 27 37

Т.е. надо сделать выборку из базы, и чтобы учитывались только цифры.
Т.е. чтобы не учитывались минусы, скобки, пробелы...

SELECT * FROM phones WHERE phone LIKE %7%3% не предлагать...
Спасибо.
 

klax

Новичок
Потому что неизвестно сколько символов буду запрашивать.
К тому же может попасться и такая строка, в которой есть какая-либо цифра между 7 и 3... А этот телефон мне уже будет не нужен.

И кстати. В мускуле есть что-нить вроде регулярных выражений как в пхп?
 

klax

Новичок
Да. именно в такой последовательности, которая указана в вопросе.
т.е. именно 73, а не 37.
И *НЕ* нужны телефоны типа 7625767132. Т.е. где между 7 и 3 что-нить еще есть.
 

alexcrown

Новичок
Есть регулярные выражения http://dev.mysql.com/doc/refman/5.1/en/regexp.html
С ними будет примерно так:
select ... where phone rlike '7[^[:digit:]]*3'
 

klax

Новичок
Т.е. мне между всем символами надо будет вставить "[^[:digit:]]*"?
Потому что запрос будет не только по 2-м цифрам. Это могут быть и 3, и 4, и 6 цифр...

-~{}~ 25.08.08 14:11:

З.Ы.: мне надо чтобы выбрались телефоны, где между указанными цифрами МОГУТ БЫТЬ только пробелы, круглые скобки и минусы.
в пхп это выглядит так:
7( )?(\()?(\))?(-)?3 -- сочетание 73 (выдаст 7829734, 78297-34, 78297 34, 78297(34 и т.д.)
4( )?(\()?(\))?(-)?2( )?(\()?(\))?(-)?2 -- сочетание 422 (выдаст 4(2)2, 376(42 2)-74 и.т. )
1( )?(\()?(\))?(-)?4( )?(\()?(\))?(-)?8( )?(\()?(\))?(-)?5 -- сочетание 1485 и т.д. и т.п.
А как будет выглядеть в мускуле?
 

alexcrown

Новичок
Да, но тогда как-то громоздко получается.

Но если тебе известны возможные символы кроме цифр, то можешь попробовать все их убрать из строки с помощью replace и уже сравнить с нужной тебе последовательностью:
SELECT ... where replace( replace( replace( replace( phone, '(', '' ) , ')', '' ) , ' ', '' ) , '-', '' ) LIKE '%167%'
 

klax

Новичок
Т.е. в мускуле есть replace?
Как в пхп str_replace?

-~{}~ 25.08.08 14:17:

Хм... Спасибо! :)) Попробую... :))
 

korchasa

LIMB infected
А не проще базу один раз почистить, чем каждый раз базку напрягать?
 

klax

Новичок
Дык если есть уже база... Потом, конечно, сделаю UPDATE всех телефонов с убиранием всех лишних символов типа пробелов, скобок и прочей фигни...

-~{}~ 25.08.08 15:09:

Блин. Не работает так. :((
Подскажите, в чем ошибка?
Плиз...

SELECT * FROM `orders` WHERE ((`is_deleted` = '0') AND (replace(`cphone`,'-','')) LIKE '%32%'));

В базе точно есть номер (960)279-73-21
А выдает ошибку:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in file.php on line 25

Код тут:
$where="(`is_deleted` = '0')";
if(trim($cphone)!="") $where.=" AND (replace(`cphone`,'-','')) LIKE '%$cphone%')";
print "where=$where\n";
$query="SELECT * FROM `orders` WHERE ($where);";
print "query=$query\n";
$res=mysql_query($query);
$num=mysql_num_rows($res);
print "num=$num\n";

Что я не так делаю?

Причем без строки if(trim($cphone)!="") $where.=" AND (replace(`cphone`,'-','')) LIKE '%$cphone%')"; все работает и выбирает нормально.
Поле cphone в таблице есть. is_deleted тоже.

-~{}~ 25.08.08 15:22:

Всё! Нашел ошибку... :)) Лишняя скобочка после replace... :))
 
Сверху