Несколько полезных SQL запросов

Технические вопросы по UTM 5.0
Закрыто
ant_perch
Сообщения: 27
Зарегистрирован: Вт фев 19, 2013 09:56
Контактная информация:

Сообщение ant_perch »

Cramac писал(а):3мя сообщениями выше, мне отвечали на данный вопрос.
Да спасибо, нашел :)

ip_groups.uname

wtyd
Сообщения: 2
Зарегистрирован: Ср май 27, 2015 13:01

Сообщение wtyd »

Помогите составить sql запрос. Нужно заапдейтить mac адрес в табрице ip_groups, зная логин ипароль пользователя из таблицы users и лицевой счёт, который юзеру принадлежит.

В таблице users есть ссылка на основной счёт (basic_account), а если у юзера больше одного счёта, то пока не могу придумать, как их связать с логином.

Пока селект для тестирования связей такой и он не работает:

Код: Выделить всё

SELECT  
        ig.mac,
        a.id
FROM
        UTM5.ip_groups ig,
        UTM5.iptraffic_service_links isl,
        UTM5.service_links sl,
        UTM5.accounts a,
        UTM5.users u
WHERE
        ig.ip_group_id=isl.ip_group_id  AND
        isl.id=sl.id            AND
        sl.account_id=a.id AND
        u.login='test' #??? вот тут надо как-то связать/сослаться на счёт или на что-то
UPDATE:

Код: Выделить всё

SELECT  
        ig.mac,
        a.id,
        u.login
FROM
        ip_groups ig,
        iptraffic_service_links isl,
        service_links sl,
        accounts a,
        users u,
        users_accounts ua
WHERE
        ig.ip_group_id=isl.ip_group_id  AND
        isl.id=sl.id            AND
        sl.account_id=a.id      AND
        a.id=ua.account_id      AND
        ua.uid=u.id             AND
        a.is_deleted='0'        AND
        u.is_deleted='0'        AND
        a.id='10'               AND
        u.login='test'
У юзера test есть два ЛС 5 и 10, 5 основной, бфл заведён при создании юзера, а 10 ему навесили позже, типа у одного юзера два подключения, два ЛС и всё такое. Если указать a.id='10', то выводится один правильный мак, а если указать a.id='5', то выводятся два мака. Т.е. надо как-то устранить эту неоднозначность условиями. Пока не знаю как.

У юзера может быть несколько ЛС, на ЛС наверное можно навесить несколько сервисных связок, в сервисной связке можно создать несколько услуг, в услуге можно добавить несколько ip-групп. Мак в ip-группе, а как тогда быть ? Всего по нескольку, как тогда нужный мак выцепить ? Ещё какой-то критерий надо проверять кроме логина, пароля, ЛС ...

Я вообще правильно рассуждаю ? Реверс инженеринг замыслов разработчиков это создание новой нейронной сети в своей голове ;-)

UPDATE2:

Код: Выделить всё

# update ig.mac by login, pass, account
UPDATE
        ip_groups ig,
        iptraffic_service_links isl,
        service_links sl,
        accounts a,
        users_accounts ua,
        users u
SET ig.mac='01:00:00:00:00:10'
WHERE
        ig.ip_group_id=isl.ip_group_id  AND
        isl.id=sl.id            AND
        sl.account_id=a.id      AND
        a.id=ua.account_id      AND
        ig.is_deleted='0'       AND
        isl.is_deleted='0'      AND 
        sl.is_deleted='0'       AND
        a.is_deleted='0'        AND
        a.is_blocked='0'        AND
        a.id='10'               AND
        u.login='test'          AND
        u.password='abff82d9'
Вроде бы работает, хотя наверняка не совсем правильно и можно гораздо лучше :-).

Проблема была в том, что не все is_deleted проверял. Это наверное вообще всегда при любых запросах во всех используемых таблицах надо делать ?

Shiva
Сообщения: 131
Зарегистрирован: Пт авг 28, 2009 12:39
Откуда: Россия, Тверь

Сообщение Shiva »

Мак бесполезно править SQLем, так как он не обновится нормально до перезапуска биллинга. Для этого *urfa пользоваться надо.

wtyd
Сообщения: 2
Зарегистрирован: Ср май 27, 2015 13:01

Сообщение wtyd »

Shiva писал(а):Мак бесполезно править SQLем, так как он не обновится нормально до перезапуска биллинга. Для этого *urfa пользоваться надо.
Почему бесполезно ? :-). Всё он обновляется. У нас нет urfa-модуля за 45 тысяч, так же у нас нет dhcp модуля. Мы вообще этот биллинг меньше недели изучаем. Планируем просто использовать его базу в качестве справочника. dhcp-сервер будет внешний, он будет смотреть в базу и всё, а мак менять - это юзерам при смене оборудования, чтобы техсапорт не дрюкать.

Как использовать urfa без покупки этого модуля ? Наверное надо знать протокол, который скорее всего на xml, но если его не знать, то не получится.

Я понимаю, что напрямую в базу лазить вообще неправильно и неразумно по многим причинам, но пока других вариантов мы не видим.

Если можно, предложите, пожалуйста, более разумный подход.

Jonson
Сообщения: 150
Зарегистрирован: Ср фев 02, 2005 21:48
Откуда: МО, Ногинский р-он

Сообщение Jonson »

Добрый день.

Подскажите алгоритм как выдернуть стоимость из следующего тарифа, с учетом подключенных услуг в текущем?

Т.е. допустим в тарифе 4 услуги, подключены пользователю только 2, на следующий месяц он меняет тариф и у него автоматом будут подключены теже услуги, но в другом тарифе, как связать аккаунт с этими услугами?

Shiva
Сообщения: 131
Зарегистрирован: Пт авг 28, 2009 12:39
Откуда: Россия, Тверь

Сообщение Shiva »

wtyd, если штатными средствами пользоваться, то они кешируют у себя результат запроса к базе. Для urfa есть куча бесплатных библиотек, даже тут обсуждается несколько.

Аватара пользователя
Rusteko
Сообщения: 47
Зарегистрирован: Пт янв 29, 2010 19:40

Сообщение Rusteko »

Подскажите плиз, в какой таблице находится информация о состоянии пользователя (включен интернет или выключен интернет)?

Cramac
Сообщения: 454
Зарегистрирован: Сб июл 01, 2006 17:59

Сообщение Cramac »

Rusteko писал(а):Подскажите плиз, в какой таблице находится информация о состоянии пользователя (включен интернет или выключен интернет)?
таблица dhs_sessions_log колонка Acct_Status_Type

xDee
Сообщения: 2
Зарегистрирован: Вт июн 23, 2015 15:14

Сообщение xDee »

Доброго времени суток всем ! Помогите пожалуйста с SQL запросом.
База utm 5.3-005 на Sql 5.1 , появилась необходимость перейти с сервисных связок на тарифные связки, делать вручную это может потянуть за собой много проблем (человеческий фактор, кривые руки), да и абонентов не мало и на сколько это растянется не очень понятно. Так вот, можно ли sql запросом удалить сервисную связку у абонента и присвоить ему тарифную связку в которой есть эта же сервисная связка.
В ручную это делается так : у абонента удаляем сервисную - добавляем ему тарифную в которой уже прописана сервисная. Прошу помощи!

Cramac
Сообщения: 454
Зарегистрирован: Сб июл 01, 2006 17:59

Сообщение Cramac »

через SQL врятли стоит такое делать, через урфу.

xDee
Сообщения: 2
Зарегистрирован: Вт июн 23, 2015 15:14

Сообщение xDee »

Да уж, еще бы знать урфу для полного счастья ! А скулем это не возможно ?

Jonson
Сообщения: 150
Зарегистрирован: Ср фев 02, 2005 21:48
Откуда: МО, Ногинский р-он

Сообщение Jonson »

где-то ошибся с запросом, ищу сумму которая будет списана со следующем тарифом, не все услуги суммируются у некоторых пользователей, думаю я как-то не верно привязываю услуги к пользователю?

SELECT users.id,users.mobile_telephone,accounts.balance,sum(periodic_services_data.cost) \
FROM users,users_accounts,accounts,account_tariff_link,service_links,periodic_service_links,tariffs_services_link,periodic_services_data \
WHERE users.is_deleted=0 \
AND users.is_juridical=0 \
AND users.id=users_accounts.uid \
AND users_accounts.is_deleted=0 \
AND users_accounts.account_id=accounts.id \
AND accounts.is_deleted=0 \
AND accounts.balance>0 \
AND accounts.id=service_links.account_id \
AND service_links.is_deleted=0 \
AND service_links.service_id=periodic_service_links.id \
AND periodic_service_links.is_deleted=0 \
AND accounts.id=account_tariff_link.account_id \
AND account_tariff_link.is_deleted=0 \
AND account_tariff_link.next_tariff_id=tariffs_services_link.tariff_id \
AND tariffs_services_link.is_deleted=0 \
AND periodic_service_links.policy_id=periodic_services_data.policy_id \
AND tariffs_services_link.service_id=periodic_services_data.id \
AND periodic_services_data.is_deleted=0;

Аватара пользователя
торопыга
Сообщения: 61
Зарегистрирован: Пн ноя 01, 2010 12:06

Сообщение торопыга »

Добрый день! Подскажите с запросом по поиску IP всех пользователей которые заблокированы и имеют отрицательный баланс. На 5.2-007 был такой:

SELECT inet_ntoa(0xffffffff & ig.ip) FROM users u, service_links sl, iptraffic_service_links isl, ip_groups ig, accounts a WHERE u.id=sl.user_id AND u.basic_account=a.id AND a.is_blocked != 0 AND a.balance < 0 AND isl.id=sl.id AND isl.ip_group_id=ig.ip_group_id AND u.is_deleted=0 AND sl.is_deleted=0 ORDER BY u.id;

Обновился на 5.3-002 не работает.

Аватара пользователя
Magnum72
Сообщения: 1947
Зарегистрирован: Чт сен 22, 2005 06:54
Контактная информация:

Сообщение Magnum72 »

торопыга писал(а):Добрый день! Подскажите с запросом по поиску IP всех пользователей которые заблокированы и имеют отрицательный баланс. На 5.2-007 был такой:

SELECT inet_ntoa(0xffffffff & ig.ip) FROM users u, service_links sl, iptraffic_service_links isl, ip_groups ig, accounts a WHERE u.id=sl.user_id AND u.basic_account=a.id AND a.is_blocked != 0 AND a.balance < 0 AND isl.id=sl.id AND isl.ip_group_id=ig.ip_group_id AND u.is_deleted=0 AND sl.is_deleted=0 ORDER BY u.id;

Обновился на 5.3-002 не работает.
У меня вроде работает данный запрос.

kara
Сообщения: 125
Зарегистрирован: Вс мар 21, 2010 21:02

Сообщение kara »

+1
работает

Закрыто