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

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

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

У меня выдает одни и те же IP постоянно. Причем делаю отрицательный баланс на нескольких тестовых аккаунтах, делаю запрос - IPшники тестовых аккаунтов в выводе не появляются. Ну ок, если у двоих работает, буду копать дальше. Спасибо.

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

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

Нашел непонятку! Делаю отрицательный баланс на аккаунте, делаю запрос в таблицу accounts по этому аккаунту и получаю поле "is_blocked" = 0 , т.е. не изменилось, но изменилось поле "block_id" стало 31752, меняю в админке у этого аккаунта тип блокировки на "Административную", снова делаю запрос и опять поле "is_blocked"=0, а поле "block_id" стало 31753. Если я правильно понимаю то при минусовом балансе и системной блокировке поле "is_blocked" должно быть 16, а при административной 256.

mrmix25
Сообщения: 104
Зарегистрирован: Вт июн 07, 2011 11:43

Сообщение mrmix25 »

торопыга писал(а):Нашел непонятку! Делаю отрицательный баланс на аккаунте, делаю запрос в таблицу accounts по этому аккаунту и получаю поле "is_blocked" = 0 , т.е. не изменилось, но изменилось поле "block_id" стало 31752, меняю в админке у этого аккаунта тип блокировки на "Административную", снова делаю запрос и опять поле "is_blocked"=0, а поле "block_id" стало 31753. Если я правильно понимаю то при минусовом балансе и системной блокировке поле "is_blocked" должно быть 16, а при административной 256.
в 5.3-002 is_blocked не используется... поменяли механизм

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

accounts.block_id = blocks_info.id

а состояние блокировки пишется в

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

blocks_info.block_type

расшифровывается так

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

0=нет
1=Системная блокировка
2=Административная блокировка
3=Пользовательская блокировка

ну запрос думаю поправите сами без проблем
:wink:

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

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

Спасибо огромное!

torrus
Сообщения: 73
Зарегистрирован: Чт фев 02, 2012 16:10
Откуда: Александров
Контактная информация:

Сообщение torrus »

Доброго дня,коллеги!

Подскажите,можно ли и как сделать,если возможно вот что.

Нужно запросом в базу узнать,у кого стоит галочка "Не применять правила фаервола" и их количество. Перелопатили всё,но так и не нашли эту таблицу/колонку/строчку :(

basker
Сообщения: 51
Зарегистрирован: Вт апр 28, 2015 13:40

Сообщение basker »

Самому стало интересно, нашел ;)
Таблица ip_groups, колонка ip_type.
Галки нет = 1
Галка есть = 3
Дальше думаю справитесь сами.

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

Сообщение Magnum72 »

basker писал(а):Самому стало интересно, нашел ;)
Таблица ip_groups, колонка ip_type.
Галки нет = 1
Галка есть = 3
Дальше думаю справитесь сами.
Это битовое поле
первый бит отвечает за "Не ВПН", второй за "не применять правила фаирвола"
соответственно комбинации: 0 1 2 3

Аватара пользователя
TiRider
Сообщения: 568
Зарегистрирован: Сб июн 07, 2008 12:43

Сообщение TiRider »

Коллеги, нужен Select + Update запрос в базу, чтобы выдернуть логины и пароли из коммутируемого доступа и залить их в связку "передачи трафика", после чего удалить связку "коммутируемый доступ" всем абонентам. Может кто заморачивался?

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

Сообщение Magnum72 »

TiRider писал(а):Коллеги, нужен Select + Update запрос в базу, чтобы выдернуть логины и пароли из коммутируемого доступа и залить их в связку "передачи трафика", после чего удалить связку "коммутируемый доступ" всем абонентам. Может кто заморачивался?
Я бы урфой делал, удалять связку точно бы в базе не стал иначе.

Аватара пользователя
TiRider
Сообщения: 568
Зарегистрирован: Сб июн 07, 2008 12:43

Сообщение TiRider »

Magnum72 писал(а): Я бы урфой делал, удалять связку точно бы в базе не стал иначе.
Возможно я что-то делаю не так, но у меня urfaphp так и не заработала корректно. Да и мануала нет нормального, все на коленке...

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

Сообщение kara »

Есть идеи как запросом узнать просроченную(более 60 дней) дебиторскую задолженность по лицевому счету?

Думаю надо химичить с основным отчетом, но пока не пойму как.

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

Сообщение Magnum72 »

kara писал(а):Есть идеи как запросом узнать просроченную(более 60 дней) дебиторскую задолженность по лицевому счету?

Думаю надо химичить с основным отчетом, но пока не пойму как.
Там очень много нюансов, как варианты:

1) Выбрать всех пользователей с блокировкой и найти по discount_transaction время когда они ушли в минус.

2) По block_info найти время начала блокировки текущей

Но бухам обычно мало этого, им обычно надо больше информации, мы например готовим ежемесячно отчеты:

1) Раз в квартал по абонентам у которых срок КЗ и ДЗ более трех лет для списания задолженностей.

2) Ежемесячно три отчета почти похожих, но с разными интервалами КЗ и ДЗ:
- для финансовой отчетности (интервалы типа 0-30, 30-60, 60-90),
- для бухгалтерской (0-30, 30-90, 90-180)
- корпоративной (Это тоже что и для бухгалтерской но интервалы привязаны к началу месяца т. е. получается что-то типа 0-31, 31-60, 60-91))

maxxsoft
Сообщения: 125
Зарегистрирован: Пт янв 18, 2013 09:23

Сообщение maxxsoft »

kara писал(а):Есть идеи как запросом узнать просроченную(более 60 дней) дебиторскую задолженность по лицевому счету?

Думаю надо химичить с основным отчетом, но пока не пойму как.
Если основываться на дату блокировки, то у меня такой запрос:

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

SELECT
 u.login,
 a.balance,
 u.full_name,
 u.actual_address,
 u.mobile_telephone,
 r.router_ip,
 u.port_number,
 FROM_UNIXTIME(b.start_date,'%Y-%m-%d'),
 ug.group_id

FROM
users AS u,
blocks_info AS b,
accounts AS a,
routers_info AS r,
users_groups_link AS ug

WHERE
 u.basic_account=a.id
 and &#40;b.start_date<unix_timestamp&#40; date_sub&#40; curdate&#40; &#41; , INTERVAL 2 MONTH &#41;&#41;&#41;
 and u.remote_switch_id=r.id
 and b.block_type=1
 and b.expire_date=2000000000
 and u.basic_account=b.account_id
 and u.is_deleted=0
 and b.is_deleted=0
 AND u.id=ug.user_id
 order by start_date;
кстати в этом топике уже пару раз подобное решение мелькало....

misha_40hex
Сообщения: 7
Зарегистрирован: Вт июл 08, 2014 16:53

Сообщение misha_40hex »

Не подскажите, как для заданного пользователя и заданной сервисной связки узнать _текущую_ политику списания средствами SQL ?

Я нашел поле policy_id в periodic_service_links, но у меня вопрос, по каким полям оно связано с таблицами пользователей и тарифов ?

Я попробовал вот такое:

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

SELECT atl.id, atl.account_id, u.login, u.full_name, acc.balance,
  tar.name AS tariff_name, ntar.name AS next_tariff_name,
  dp.is_expired,
  &#40;SELECT psl.policy_id FROM periodic_service_links psl WHERE psl.discount_period_id = dp.id AND psl.is_deleted = 0 ORDER BY expire_date DESC LIMIT 1&#41; AS last_policy_id 
FROM `account_tariff_link` atl
LEFT JOIN discount_periods dp  ON dp.id = atl.discount_period_id
LEFT JOIN tariffs tar ON tar.id = atl.tariff_id AND tar.is_deleted = 0
LEFT JOIN tariffs ntar ON ntar.id = atl.next_tariff_id AND ntar.is_deleted = 0
LEFT JOIN users u ON u.basic_account = atl.account_id AND u.is_deleted = 0
LEFT JOIN accounts acc ON acc.id = atl.account_id AND acc.is_deleted = 0

WHERE dp.is_expired = 0 AND atl.is_deleted = 0
HAVING    last_policy_id = 5
Раньше я список услуг всегда извлекал из `service_links`, но как ей правильно связать с periodic_service_links - я пока не разобрался.

Также нашел значение policy_id в `periodic_services_data`.

Просьба подсказать, какие значения policy_id в таблицах каким привязкам политик списания соответствуют.

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

Сообщение Magnum72 »

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

SELECT 
  sl.user_id,
  us.full_name,
  sl.account_id,
  sd.id AS service_id,
  sl.id AS slink_id,
  sd.service_name,
  ac.is_blocked,
  psl.policy_id 
FROM
  UTM5.periodic_service_links AS psl,
  UTM5.service_links AS sl,
  UTM5.services_data AS sd,
  UTM5.accounts AS ac,
  UTM5.users AS us 
WHERE psl.is_deleted = 0 
  AND psl.id = sl.id 
  AND sl.account_id = ac.id 
  AND sl.service_id = sd.id 
  AND sl.user_id = us.id;

Закрыто