Две таблицы код, прайс и номер телефона длительность. ПОМОГИТЕ

OxyFire

Новичок
Есть две таблицы вида:

ПЕРВАЯ:
code | price
79 | 1.10
7 | 0.50
7499 | 1.02
78182 | 1.51
3125 | 2.50
3126 | 1.10

ВТОРАЯ:
dst | duration
79099888771 | 2.2
79096444320 | 12
74954943439 | 0,2
78182255635 | 20
3125223454 | 15

В общем суть: В первой таблице есть коды городов, стоимость, Во второй номера телефонов и их длительность. Нужно каким-то образом выцеплять из номеров телефонов коды присутствующие в первой таблице и рядом с номером телефона вывести стоимость минуты, т.е таблица вида должна получиться
dst | duration | code | price

Проблема что есть код просто 7, а есть код 7499 и 79 и 78182 и много много других - ума не приложу как их сравнивать. Прошу Вас ГУРУ помочь.
 

workOnFood

Новичок
Искать совпадения сначала по самым длинным кодам городов и писать в таблицу вида dst | duration | code | price и удалять соответствующие записи из двух исходных таблиц. Правда будет вероятность ошибки в случае если код допустим 7 а номер телефона 8182909 т.е. часть номера будет соответствовать части кода - 78182.
 

OxyFire

Новичок
В том то и проблема, что таблица ВТОРАЯ динамическая и постоянно обновляется.
Нужно унифицированное решение
8182.
Не могу придумать запрос, которые это будет делать. Думал в цикле обработать... не придумалось, голову сломал
 

workOnFood

Новичок
В таблицу с номерами пиши отдельно код и сам номер, а уже существующие перезапиши так как я сказал выше, ИМХО иначе не получится.
 

OxyFire

Новичок
НЕРЕАЛЬНО. таблицу с номерами заполняет система звонков... и переписать её не реально, т.к. челвоек набирает полностью 7909888771 а не отдельно код
 

alekciy

Новичок
Решение влоб. Наверняка можно будет оптимизировать в один запрос. Но на вскидку так.

Берем в dst номере 5 символов (в России код города может занимать до 5 цифр) слева (7, +7, 8 и прочие варианты сюда не входят) , начинаем посимвольный двигаться справа-налево и ищем это значение в code, если на текущем шаге результат пустой, значит сдвигаемся еще на символ и делаем запрос.

Пример.
dt = 79099888771
1) SELECT price FROM ПРЕВАЯ WHERE code = 790998;
результат пустой.
2) SELECT price FROM ПРЕВАЯ WHERE code = 79099;
результат пустой.
3) SELECT price FROM ПРЕВАЯ WHERE code = 7909;
результат пустой.
4) SELECT price FROM ПРЕВАЯ WHERE code = 790;
результат пустой.
5) SELECT price FROM ПРЕВАЯ WHERE code = 79;
результат price = 1.1
 

workOnFood

Новичок
Вот именно, что форму заполняет человек. Сделай не одно поле ввода а два. Было бы сложнее если бы номера откуда то парсились.

Конечно если это делает не менеджер а рядовой юзер, тогда да такое решение скорее всего не подойдет.
 

alekciy

Новичок
НЕРЕАЛЬНО. таблицу с номерами заполняет система звонков... и переписать её не реально, т.к. челвоек набирает полностью 7909888771 а не отдельно код
Совершенно не проблема. Можно дописать к таблице еще два поля в которых раздельно хранить номер и код. И даже не обязательно ручную их заполнять, все можно решить на уровне триггеров (срабатывающих на INSERT от телефонного оборудования) + функцию вычисления код. По хорошему должна быть таблица-справочник в которой содержатся все коды городов. Эту инфу можно взять с официальных сайтов федеральных провайдеров.
 

OxyFire

Новичок
workOnFood, форму никто не заполняют, это люди ЗВОНЯТ с телефона!
alekciy, у меня в ПЕРВОЙ таблице кодов 3500, решение нужно универсальное :(
 

OxyFire

Новичок
alekciy у меня есть 3500 кодов, по всем направлениям, которым звонят наши люди. Звонят они через Elastix в нем только так таблица пишется :(
 

alekciy

Новичок
workOnFood, форму никто не заполняют, это люди ЗВОНЯТ с телефона!
alekciy, у меня в ПЕРВОЙ таблице кодов 3500, решение нужно универсальное :(
В чем не универсальность приведенного мною решения? В том, что номера не нормализованные? Ну так нормализуй их.
 

OxyFire

Новичок
alekciy, как все сложно. В любом случае не очень понятно как это реализовать
 

OxyFire

Новичок
alekciy, идея кода ясна и с россией ясно все, но насколько долго это будет работать и проверяться, если за месяц 5000 звонков с разными кодами и не только России
 

alekciy

Новичок
Ну, я отредактировал ниже) Для рядовых юзеров естественно я бы так делать не стал. А менеджерам за это деньги платят, вот пусть включают голову)
Задача формализуема и решаемая на программном уровне. Тут даже менеджеров напрягать не нужно. Все варианты набора номера могут быть описаны и закодированны. На менеджеров должны отдаваться ТОЛЬКО номера для которых система автоматически не смогла вычислить код города (возникает, когда в номер телефона пишут добавочные номера и прочие эзотические варианты в духе "спросить Васю", но даже и они зачастую решаемы).
 

alekciy

Новичок
alekciy, идея кода ясна и с россией ясно все, но насколько долго это будет работать и проверяться, если за месяц 5000 звонков с разными кодами и не только России
Ни какого отношения к количеству звонков это не имеет. Хоть миллион. Главное иметь таблицы-словари в которых перечислены коды городов. Звонки не только из/в России? Так в чем проблема-то? Коды стран записанных через +цифра известны (+7 Россия), коды выхода на межгород тоже, коды выхода на международные звонки тоже. Когда ты понял, в какую страну звонок ты можешь уже дальше подключить нужную таблицу-словарь и по ней определить код города (алгоритм влоб я описал), а по нему уже и стоимость.
 

OxyFire

Новичок
alekciy, сколько в руб. будет стоить написать БЫСТРЫЙ код. Дампы таблиц дам
 

workOnFood

Новичок
alekciy

Я даже не пытаюсь спорить, ваше решение 100% освобождает менеджеров от умственного труда)

Хотя в данном случае все делается программно, но как я понял мы спорим о некой абстракции в которой телефон вбивает манагер)
 
Сверху