Suicid1g
|
|
« : 11 Октября 2012, 14:25:04 » |
|
Всем привет, замучался с дополнительными данными: там хранится точка подключения и порт в 2х полях. хочу выбрать юзеров подключенных "в тот вон порт, вон в том коммутаторе"
|
|
|
Записан
|
|
|
|
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
Карма: 116
Offline
Сообщений: 1059
|
|
« Ответ #1 : 11 Октября 2012, 15:15:12 » |
|
зачем там хранить точку подключения? Если для этого есть колонка в таблице users? oO
|
|
|
Записан
|
|
|
|
Suicid1g
|
|
« Ответ #2 : 11 Октября 2012, 16:10:36 » |
|
Опечаточка: не точка подключения, а ип коммутатора куда воткнули клиента Но смысл вопроса от этого не меняется: как найти в этой таблице по 2м параметрам
|
|
« Последнее редактирование: 11 Октября 2012, 16:12:27 от Suicid1g »
|
Записан
|
|
|
|
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
Карма: 116
Offline
Сообщений: 1059
|
|
« Ответ #3 : 11 Октября 2012, 16:24:18 » |
|
подзапросами ищем сначала всех на свитче, потому что их, вероятнее, будет меньше, а потом смотреть у кого интересующий нас порт.
|
|
|
Записан
|
|
|
|
stix
NoDeny
Спец
Карма: 72
Offline
Сообщений: 1872
Nodeny Support Team
|
|
« Ответ #4 : 11 Октября 2012, 16:27:22 » |
|
я бы сделал через функцию
|
|
« Последнее редактирование: 11 Октября 2012, 16:30:16 от stimels »
|
Записан
|
|
|
|
Suicid1g
|
|
« Ответ #5 : 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 покажет что там этот юзер
|
|
« Последнее редактирование: 11 Октября 2012, 17:03:59 от Suicid1g »
|
Записан
|
|
|
|
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
Карма: 116
Offline
Сообщений: 1059
|
|
« Ответ #6 : 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 это "Технические данные"
|
|
|
Записан
|
|
|
|
Suicid1g
|
|
« Ответ #7 : 12 Октября 2012, 09:13:15 » |
|
ну судя по подфоруму у меня не 50 nodeny да, поля находятся в тех. данных 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) не имеем такой таблицы:(
|
|
|
Записан
|
|
|
|
Suicid1g
|
|
« Ответ #8 : 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) )
|
|
|
Записан
|
|
|
|
stix
NoDeny
Спец
Карма: 72
Offline
Сообщений: 1872
Nodeny Support Team
|
|
« Ответ #9 : 12 Октября 2012, 09:46:38 » |
|
А потом еще select name,fio from users where id = твой запрос. Сколько времени занимает выборка?
|
|
|
Записан
|
|
|
|
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
Карма: 116
Offline
Сообщений: 1059
|
|
« Ответ #10 : 12 Октября 2012, 10:07:13 » |
|
ну судя по подфоруму у меня не 50 nodeny да, поля находятся в тех. данных 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 отличаются только ограничениями, если что
|
|
|
Записан
|
|
|
|
Suicid1g
|
|
« Ответ #11 : 12 Октября 2012, 10:14:30 » |
|
Сколько времени занимает выборка?
сложно судить о времени выборки на БД с 1м пользователем
|
|
|
Записан
|
|
|
|
stix
NoDeny
Спец
Карма: 72
Offline
Сообщений: 1872
Nodeny Support Team
|
|
« Ответ #12 : 12 Октября 2012, 10:14:52 » |
|
Кстати в чем отличие 50.32 и 50.33 ?
|
|
|
Записан
|
|
|
|
elite
Начальник планеты
NoDeny
Спец
Карма: 52
Offline
Сообщений: 1226
In LAN we trust!
|
|
« Ответ #13 : 12 Октября 2012, 10:30:06 » |
|
в допданных
|
|
|
Записан
|
|
|
|
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
Карма: 116
Offline
Сообщений: 1059
|
|
« Ответ #14 : 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 - требуемый шаблон
|
|
|
Записан
|
|
|
|
|