Перейти к содержимому


Поиск в таблице записей


Сообщений в теме: 4

#1 ber

    Активный участник

  • Пользователи
  • PipPipPip
  • 234 сообщений
  • Пол:Мужчина
  • Город:Москва

Отправлено 30 Декабрь 2015 - 16:40

пример:
из IP телефонии переносятся все звонки, и появилась запись со строкой "Вызывающий номер" = 74950001122

Есть вычисление, которое проверяет наличие этого номера в базе и в случае совпадения заполняет поле "Клиент":

$sqlQuery = "SELECT `id` FROM ".DATA_TABLE."87 WHERE (`f1193` LIKE '%".$phone."%') OR (`f1125` LIKE '%".$phone."%') LIMIT 1";
$result = sql_query($sqlQuery);
if (sql_num_rows($result) > 0) {
$select = sql_fetch_assoc($result);
$line['Клиент'] = $select['id'];
};

Теперь вопрос
1. если в базе номер записан как 7(495)000-11-22, то как правильно изложить код, что бы установилась связь?
Тоесть в номере могут быть лишние пробелы, плюсы, скобки, тире и тд.

2. И самое сложное... если номер записан как 8(495) 000 11 22 (главное начиная с 8), то возможно ли учесть такое?
www.its-truck.ru - Группа компаний ИТС
www.intertransservice.ru - ИТС-МАН - Официальный дилер MAN Truck and Bus
www.its-daf.ru - ИТС-ДАФ - Официальный дилер DAF Trucks
www.its-hino.ru - ИТС-Хино - Официальный дилер Hino Motors
www.its-kamaz.ru - ИТС-Камаз - Официальный дилер ПАО КамАЗ
www.trp-parts.ru - Интернет-магазин запасных частей для грузовых авто

#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 31 Декабрь 2015 - 10:53

У меня была похожая задача, я ее решил так:

(replace(replace(replace(replace(replace(`f1111`,' ',''),'+',''),'-',''),'(',''),')','') LIKE '%".substr($phone,1)."%'

Пояснение:
1. В искомом поле f1111 в БД заменяем все ненужные нам символы (пробелы, плюсы, дефисы и скобки) на пустую строку. Т.о. поиск будет по "чистым" номерам.
2. Из $phone удаляем первый символ, т.е. поиск будет идти по подстроке без первой цифры. А значит найдет и внутри номеров с 7, и с 8. Качество поиска не страдает.

Я не претендую на то, что это самый оптимальный вариант, но по крайней мере рабочий.

#3 ber

    Активный участник

  • Пользователи
  • PipPipPip
  • 234 сообщений
  • Пол:Мужчина
  • Город:Москва

Отправлено 13 Январь 2016 - 17:34

Просмотр сообщенияCbCoder (31 Декабрь 2015 - 10:53) писал:

У меня была похожая задача, я ее решил так: (replace(replace(replace(replace(replace(`f1111`,' ',''),'+',''),'-',''),'(',''),')','') LIKE '%".substr($phone,1)."%' Пояснение: 1. В искомом поле f1111 в БД заменяем все ненужные нам символы (пробелы, плюсы, дефисы и скобки) на пустую строку. Т.о. поиск будет по "чистым" номерам. 2. Из $phone удаляем первый символ, т.е. поиск будет идти по подстроке без первой цифры. А значит найдет и внутри номеров с 7, и с 8. Качество поиска не страдает. Я не претендую на то, что это самый оптимальный вариант, но по крайней мере рабочий.

Спасибо! Отличное решение, все работает! Только одна лишняя скобка вначале.
www.its-truck.ru - Группа компаний ИТС
www.intertransservice.ru - ИТС-МАН - Официальный дилер MAN Truck and Bus
www.its-daf.ru - ИТС-ДАФ - Официальный дилер DAF Trucks
www.its-hino.ru - ИТС-Хино - Официальный дилер Hino Motors
www.its-kamaz.ru - ИТС-Камаз - Официальный дилер ПАО КамАЗ
www.trp-parts.ru - Интернет-магазин запасных частей для грузовых авто

#4 gogibob

    Новичок

  • Пользователи
  • Pip
  • 1 сообщений

Отправлено 02 Апрель 2016 - 12:26

Добрый день!

У меня аналогичная задача.
Набрал код:
$phone = $line['Клиент']['Телефон'];
$res = sql_query("SELECT id AS nashid
		  FROM ".DATA_TABLE."130
		  WHERE
				f1700 = '%".$phone."%'");
$row = sql_fetch_assoc($res);
$line['Клиент'] = $row['nashid'];
Не работает, ошибку тоже не выдает.
Подскажите, пожалуйста, что делаю не так.

#5 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 04 Апрель 2016 - 16:26

А почему он должен работать? Вы тему то прочитайте, автор и писал что не работает как надо, ему предложили более рабочий вариант. У вас же вариант первичный неработающий.





Количество пользователей, читающих эту тему: 2

0 пользователей, 2 гостей, 0 анонимных