Задать вопрос
@SONce

Поиск телефона в базе

В базе данных есть поле phone которое содержит телефоны в формате " 7 (999) 999-99-99" а на сайте есть форма поиска в которую пользователь может забить все что ему хочется(только цифры естественно) как правильно составить запрос для поиска по телефону?
  • Вопрос задан
  • 3681 просмотр
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 5
tema_sun
@tema_sun
В базе лучше только цифры хранить. Соответственно при запросе только их regexp'ом и оставляете.

В текущей ситуации, после конвертации номера в цифры придется их еще в свой запрос сконвертировать.
Таким образом пофиг на то, что вбил юзер. Пусть хоть «8 (9 26) 12 3-4-5-6-7-» к вам попадет только 89261234567, а это уже можно превратить в 7 (926) 123-45-67
Ответ написан
Комментировать
@edogs
А в чем конкретно проблема?
В БД формат известен.
Юзер вбивает только цифры.
Вбил юзер 84951234567 — конвертните это в 7 (495) 123-45-67 и ищите.
Ответ написан
Комментировать
shvedovka
@shvedovka
Стоит учесть что телефон может быть с добавочным.
Телефон может начинаться не с +7.
Код региона может быть не только 3х, но и 4-5 значимым, например 8 (81378) 123-45.
Возможно все это в вашей ситуации не актуально.

И еще можно хранить в базе 2 варианта. Так как записал пользователь текстом, для отображения. Только цифрами для поиска и других манипуляций.

Если у вас уже есть база телефонов в формате 7 (999) 999-99-99, а искать надо по части номера, то тогда полагаю стоит сделать строковое поле содержащее цифры номера и уже по нему LIKE %часть_номера%. Если же поиск только по полному номеру, то достаточно целочисленного поля с цифрами номера.
Ответ написан
Комментировать
Есть два варианта.

1. Написать на Javascript валидатор, который будет проверять правильность формата введенных данных и осуществлять на стороне сервера проверку правильности формата перед запросом к БД (от пользователя можете требовать в таком случае любой единый формат, т.е. например: +74901234567 и уже такие номера конвертировать в требуемый формат, в котором они хранятся в базе данных).

2. Как предложили выше, конвертировать различные варианты набора телефона в требуемый формат на стороне клиента или сервера.
Ответ написан
N0Good
@N0Good
Можно упростить задачу при помощи jquery. Пользователь будет вводить номер в этом формате не напрягаясь, он будет исправляться сам. Например при помощи этого плагина: github.com/RobinHerbots/jquery.inputmask
А потом искать в базе, используя LIKE, как было предложено выше.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы