SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 18.01.2011 23:07:33

psyhonut
Участник
Зарегистрирован: 06.09.2010
Сообщений: 9

REGEXP CONCAT("^", country.code)

Есть таблица с кодами операторов с привязкой по странам.
Есть номер телефона.
Как узнать, к какой стране привязан номер?
Делается это как-то через ф-цию REGEXP CONCAT("^", country.code).
Заранее спасибо.

Неактивен

 

#2 18.01.2011 23:59:09

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: REGEXP CONCAT("^", country.code)

Зависит от формата, в котором дан номер телефона.

http://dev.mysql.com/doc/refman/5.1/en/ … tions.html
Из номера телефона вырезаете код и делаете запрос к таблице.

Неактивен

 

#3 19.01.2011 00:01:43

psyhonut
Участник
Зарегистрирован: 06.09.2010
Сообщений: 9

Re: REGEXP CONCAT("^", country.code)

Например +380501669945
В таблице со странами есть коды как из 1, так и из 2 и из 3 символов. По номеру я еще не знаю, что именно в нем код.

Неактивен

 

#4 19.01.2011 00:07:07

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: REGEXP CONCAT("^", country.code)

Тогда никак. Если вы сами не можете сформулировать правило (набор правил), которым из номера телефона извлекается код, то..

Неактивен

 

#5 19.01.2011 00:09:32

psyhonut
Участник
Зарегистрирован: 06.09.2010
Сообщений: 9

Re: REGEXP CONCAT("^", country.code)

Т.е., я не могу? Берем "+" и первые 3 цыфры - проверяем, есть ли такой код в таблице, если нет, то берем первые 2 и так же для 1. Как это на SQL запрограммировать?

Неактивен

 

#6 19.01.2011 00:25:31

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: REGEXP CONCAT("^", country.code)

Можно конечно и одним запросом, например:

select * from (
select 3 as ord, t.* from `таблица` t where `код` = SUBSTRING('телефон',2,3)
union
select 2 as ord, t.* from `таблица` t where `код` = SUBSTRING('телефон',2,2)
union
select 1 as ord, t.* from `таблица` t where `код` = SUBSTRING('телефон',2,1)) order by ord desc limit 1;

Но это извращение. Лучше пишите хранимую процедуру (если хотите на mysql) или во внешнем скрипте.

Неактивен

 

#7 19.01.2011 00:27:29

psyhonut
Участник
Зарегистрирован: 06.09.2010
Сообщений: 9

Re: REGEXP CONCAT("^", country.code)

Мне сказали использовать ф-цию REGEXP CONCAT("^", country.code). Только я никогда не пользовал регекспв  МуСКуЛе.

Неактивен

 

#8 19.01.2011 00:41:39

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: REGEXP CONCAT("^", country.code)

Так я ведь уже приводил ссылку на документацию
http://dev.mysql.com/doc/refman/5.1/en/ … tor_regexp

select * from country where '+380501669945' regexp concat('^',country.code);


Только, что вы будите делать, если в таблице есть коды 380, 38 и 3 smile

Неактивен

 

#9 19.01.2011 00:43:07

psyhonut
Участник
Зарегистрирован: 06.09.2010
Сообщений: 9

Re: REGEXP CONCAT("^", country.code)

Оно же выберет мне первый попавшийся код, правильно? Меня такое устраивает :-)

Неактивен

 

#10 19.01.2011 00:46:05

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: REGEXP CONCAT("^", country.code)

Нет, выберет все три варианта.

Неактивен

 

#11 19.01.2011 00:46:16

psyhonut
Участник
Зарегистрирован: 06.09.2010
Сообщений: 9

Re: REGEXP CONCAT("^", country.code)

Спасибо, все работает.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson