Биллинговая система Nodeny

Главная категория => Nodeny 49 => Тема начата: Suicid1g от 11 Октября 2012, 14:25:04



Название: Запрос к dopvalues
Отправлено: Suicid1g от 11 Октября 2012, 14:25:04
Всем привет, замучался с дополнительными данными:
там хранится точка подключения и порт в 2х полях.
хочу выбрать юзеров подключенных "в тот вон порт, вон в том коммутаторе"


Название: Re: Запрос к dopvalues
Отправлено: 0xbad0c0d3 от 11 Октября 2012, 15:15:12
зачем там хранить точку подключения? Если для этого есть колонка в таблице users? oO


Название: Re: Запрос к dopvalues
Отправлено: Suicid1g от 11 Октября 2012, 16:10:36
Опечаточка: не точка подключения, а ип коммутатора куда воткнули клиента
Но смысл вопроса от этого не меняется: как найти в этой таблице по 2м параметрам


Название: Re: Запрос к dopvalues
Отправлено: 0xbad0c0d3 от 11 Октября 2012, 16:24:18
подзапросами ищем сначала всех на свитче, потому что их, вероятнее, будет меньше, а потом смотреть у кого интересующий нас порт.


Название: Re: Запрос к dopvalues
Отправлено: stix от 11 Октября 2012, 16:27:22
я бы сделал через функцию


Название: Re: Запрос к dopvalues
Отправлено: Suicid1g от 11 Октября 2012, 17:01:10
подзапросами ищем сначала всех на свитче, потому что их, вероятнее, будет меньше, а потом смотреть у кого интересующий нас порт.
Код:
SELECT * FROM dopvalues WHERE dopfield_id=6 and field_value=$F{port} AND parent_id IN 
(SELECT DISTINCT parent_id FROM dopvalues WHERE dopfield_id=5 AND field_value='$sw_ip')
ORDER BY revision DESC

потом брать 1ю запись
так? если так, то если пользователь был на 1м порту, потом переключили на 2й, то при запросе информации о порте 1 покажет что там этот юзер


Название: Re: Запрос к dopvalues
Отправлено: 0xbad0c0d3 от 11 Октября 2012, 17:30:39
Так, да не так... Версия, я так думаю не 50.33.
потому нужно связывать по ревизии, а не по parent_id
Код:
SELECT * FROM dopvalues WHERE dopfield_id=6 and field_value=$F{port} AND revision IN 
(SELECT dv.revision FROM dopvalues dv INNER JOIN rev_users r ON r.rev=dv.revision WHERE dv.dopfield_id=5 AND dv.field_value='$sw_ip' AND r.template_num=1)
типа так, только смотря в каком шаблоне находятся эти поля: (5, 6) template_num=1 это "Технические данные"


Название: Re: Запрос к dopvalues
Отправлено: Suicid1g от 12 Октября 2012, 09:13:15
ну судя по подфоруму у меня не 50 nodeny ;D
да, поля находятся в тех. данных
Код:
INNER JOIN rev_users r ON r.rev=dv.revision WHERE dv.dopfield_id=5 AND dv.field_value='$sw_ip' AND r.template_num=1)
не имеем такой таблицы:(


Название: Re: Запрос к dopvalues
Отправлено: Suicid1g от 12 Октября 2012, 09:21:47
подсказали решение добрые люди) вот так выглядит
Код:
select parent_id
from dopvalues dv
where field_value = $F{port}
  and dopfield_id = 6  and not exists (select *  from dopvalues dvs where dvs.parent_id = dv.parent_id and dvs.dopfield_id = dv.dopfield_id and dvs.revision > dv.revision)
  and parent_id in (select parent_id
from dopvalues dv
where field_value = '$sw_ip'
  and dopfield_id = 5
  and not exists (select *  from dopvalues dvs where dvs.parent_id = dv.parent_id and dvs.dopfield_id = dv.dopfield_id and dvs.revision > dv.revision)
)


Название: Re: Запрос к dopvalues
Отправлено: stix от 12 Октября 2012, 09:46:38
А потом еще select name,fio from users where id = твой запрос.
Сколько времени занимает выборка?


Название: Re: Запрос к dopvalues
Отправлено: 0xbad0c0d3 от 12 Октября 2012, 10:07:13
ну судя по подфоруму у меня не 50 nodeny ;D
да, поля находятся в тех. данных
Код:
INNER JOIN rev_users r ON r.rev=dv.revision WHERE dv.dopfield_id=5 AND dv.field_value='$sw_ip' AND r.template_num=1)
не имеем такой таблицы:(
50 и 49 отличаются только ограничениями, если что ;)


Название: Re: Запрос к dopvalues
Отправлено: Suicid1g от 12 Октября 2012, 10:14:30
Сколько времени занимает выборка?
сложно судить о времени выборки на БД с 1м пользователем :-\


Название: Re: Запрос к dopvalues
Отправлено: stix от 12 Октября 2012, 10:14:52
Кстати в чем отличие  50.32 и 50.33 ?


Название: Re: Запрос к dopvalues
Отправлено: elite от 12 Октября 2012, 10:30:06
в допданных


Название: Re: Запрос к dopvalues
Отправлено: 0xbad0c0d3 от 12 Октября 2012, 11:23:04
в дополнение к:
в допданных
в 50.33 нет ревизии, точнее она еть, но она в другой таблице, которая задействуется только при просмотре истории и сохранении допланных, что значительно ускоряет и упрощает выборку полей.
Например для .33-версии выбрать актуальные данные для абона выглядит так:
Код:
SELECT dv.* FROM dopvalues dv
INNER JOIN dopfields df
ON df.id=dv.dopfield_id
WHERE df.template_num=y AND parent_id=x
где x - id абонента; y - требуемый шаблон


Название: Re: Запрос к dopvalues
Отправлено: stix от 12 Октября 2012, 11:31:03
Хм, стремно обновляться.
Много кустомизированного всего на 50.32

Наверное буду пробовать переносить все на 52 сразу


Название: Re: Запрос к dopvalues
Отправлено: 0xbad0c0d3 от 12 Октября 2012, 11:41:00
Стремно было обновляться с 50.19 на 50.32 с over9000 абонов ))) со всеми костылями )))


Название: Re: Запрос к dopvalues
Отправлено: stix от 12 Октября 2012, 12:25:01
Да у меня в некоторых также, потому маленький апдейт принесет большой гемор и вырванные годы.
И в каждой все по-своему...некоторые функции авторизации используют процедуры и функции подвязаны доп полях.

Со след неделе в облаке подниму последнй релиз nodeny