Задача такая: Есть таблица клиентов CUSTOMERS с телефонами вида
customer_id | name | phone ...
Есть таблица CALLS звонков клиентам, приходящая от ip телефонии вида
call_id | call_from | call_to | time ...
Проблема в том, что номера телефонов хранятся в произвольном формате. Т.е. клиенты иногда указывают код страны/города, иногда нет, иногда нули впереди, иногда плюсики, дефисы в середине, скобки и т.д. От ip телефонии тоже иногда звонки записываются с нулями впереди и не понятно какая страна, иногда полноценно с кодом страны, иногда проскакивает "+" перед номером. Одно хорошо - в таблице звонков нет лишних символов в середине номера.
Собственно нужно связать эти таблицы чтобы видеть звонки клиентов.
Пока решил проблему так: вырезаю регуляркой на РНР "не цифры", потом начинаю искать по части номера (WHERE call_from LIKE '%phone' OR call_to LIKE '%phone'), если не нашлось отрезаю переднюю цифру и еще раз ищу и т.д. пока не найдет звонок или цифр не станет меньше 7.
Работает. Но:
Спасибо.
На мой взгляд можно решить проблему добавив в таблицы ещё одно поле с телефоном, в которое будет записываться преобразованный телефон. Например, последние 7 цифр. Это можно сделать как программно, так и с помощью триггера на вставку/обновление. По такому полю уже можно легко делать полноценный JOIN. По сути это повторит Ваши действия, только подготовленная информацию уже сразу будет лежать в базе.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
можно ли в столбце из строки: 10,13,18/12:00:00/15:55:00 извлечь первые 3 цифры до символа '/' ? то есть мне надо что бы оператор LIKE сравнивал только (10,13,18),...
есть массив, после прохождения по массиву циклом foreach нужно определить первую запись к примеру:
Несколько дней назад smtp через Яндекс перестал работатьПробовал почистить кеш, но это не помогло