Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте.
Встала задача перевести абонентов Интернет провайдера одного тарифного плана (льготного) на тариф-наследник после прошествия пяти месяцев, но необходимо учитывать тот факт что пользователь мог в этот период отключаться (уезжал – попросил отключить его, дабы не начислялась абонентская плата), в это время его тарифный план имел ID=0. То время, которое он не работал нужно вычитать из общего времени работы пользователя. Например, он отключался на 10 дней, то и перевести на тариф-наследник его нужно через 5 месяцев 10 дней.
Базы данных (биллинговая система и система управления (надстройка на биллингом)) расположены на разных серверах, поэтому сделать в один запрос данное действие не получится.
Тогда будем определять, каких абонентов необходимо переключить на тариф-наследник, а уже языком скрипта, с учётом информации из базы системы управления, переключать необходимого пользователя в БД биллинга.
Выстроил следующий алгоритм:
1. В истории изменений тарифных планов выбираем всех абонентов с текущим тарифом равному одному из льготных.
2. Просматриваем всю историю абонента, вычитаем время отключенного состояния.
3. Если сумма времени работы абонента равно, либо превышает 5 месяцев, то переводим его с льготного тарифа на тариф-наследник.
Таблица «CONNECT_TARIFS_HIST» изменений тарифных планов биллинговой системы:
Отредактированно 4e1ovek (14.07.2010 23:45:00)
Неактивен
Для того, чтобы найти последний тариф, Вам нужно просто найти id этих
строк, а потом выбирать данные:
SELECT MAX(ID_CTH) FROM CONNECT_TARIFS_HIST GROUP BY ID_CONNECT;
Что касается подсчета дат — тут без полного прохода по таблице, думаю,
не обойтись. Т.е. надо делать что-то типа
SELECT @dt := MIN(dt) FROM CONNECT_TARIFS_HIST WHERE ID_CONNECT=7443;
SELECT ID_TARIF, @dt as FROM, @dt := DT as TO FROM CONNECT_TARIFS_HIST WHERE ID_CONNECT=7443;
И потом по получившейся выборке уже считать даты.
Да, для каждого пользователя отдельно.
Неактивен