SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 02.09.2008 11:14:13

qazaqq
Участник
Зарегистрирован: 02.09.2008
Сообщений: 3

Поиск по номеру телефона с разделителями...????

Уважаемые знатоки, подскажите пожалуйста, как организовать поиск в базе MySQL v 4.3 по номеру телефона, если в базе номера записуются с разделителями "-", возможно использование скобок, а также может быть по 2, 3 номера разделенных запятыми...

Например в базе есть записи:

1) 123-45-67, 8(095)255-55-33
2) 234-56-78
3) 33-33, 45-45, 56-56

Пользователь вводит 25555 или 4567 (1 запись)

Подскажите пожалуйста, как в моем случае правильно сформировать запрос, может регулярные выражения...? neutral

Отредактированно qazaqq (02.09.2008 11:14:46)

Неактивен

 

#2 02.09.2008 12:29:55

Sign
Гуру
Зарегистрирован: 26.06.2008
Сообщений: 43

Re: Поиск по номеру телефона с разделителями...????

я бы привязал к этим записям табличку с уже очищенными номерами без разделителей, где коды естественно в отдельном поле

Неактивен

 

#3 02.09.2008 12:34:30

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 848

Re: Поиск по номеру телефона с разделителями...????

Нужно убрать из колонок дефисы и потом там искать. Делается это функцией REPLACE:

SELECT REPLACE ('123-45-67', '-', ''); -- выведет '1234567'


Таким образом, запрос будет следующий:

SELECT ... WHERE REPLACE(колонка_с_телефонами, '-', '') LIKE '%1234%';


Если надо избавиться и от скобок, то тогда REPLACE (REPLACE(колонка, '-', ''), ')', '').

Учтите, что это будет достаточно тяжелый запрос: индексы использовать нельзя, серверу придется для каждого запроса создавать временную таблицу. Если будет тормозить из-за этого, то лучше сделать сразу отдельную колонку, которая хранит просто цифры без дефисов и скобок.

А вообще у Вас не очень подходящая архитектура

Регулярные выражения здесь не требуются.

Неактивен

 

#4 02.09.2008 12:35:07

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Поиск по номеру телефона с разделителями...????

Да, если Вы хотите, чтобы искала база, а не Ваше приложение, то нужно все строки
привести к единому виду. Можно написать хранимую функцию сравнения телефонов,
но этот вариант будет работать очень долго без индекса, особенно на больших базах.

Что касается проблемы "несколько телефонов на запись" - нужно сделать отдельную
табличку (с числовыми телефонами), которую привязать к основной по ключу.

Неактивен

 

#5 02.09.2008 12:43:19

qazaqq
Участник
Зарегистрирован: 02.09.2008
Сообщений: 3

Re: Поиск по номеру телефона с разделителями...????

ВСЕМ ОГРОМНОЕ СПАСИБО!!! Буду пробовать, надеюсь получится! smile

Отредактированно qazaqq (02.09.2008 12:43:41)

Неактивен

 

#6 02.09.2008 13:02:01

qazaqq
Участник
Зарегистрирован: 02.09.2008
Сообщений: 3

Re: Поиск по номеру телефона с разделителями...????

ВСЕМ спасибо, а особенно  LazY !!! Все отлично работает, база не очень большая...
Самое интересное, что вчера сам читал про строковые функции SQL и пробовал REPLACE, но не получилось... Просто не прикрутил LIKE к запросу! smile

Неактивен

 

Board footer

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