URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 87555
[ Назад ]

Исходное сообщение
"Запрос к mysql не могу победить"

Отправлено Yuhan , 08-Дек-09 15:40 
MySQL 5.1

Подскажите как можно выбрать кол-во входящего и исходящего трафика (для одного определённого ip) в одну строку и одним запросом при такой структуре таблицы:

|date_time | ip_from | s_port | ip_to | d_port | bytes |

Нужен такой результат

--- ip ---| -in-  | -out-  |
10.10.1.1 | 50 Mb | 10Mb   |

Двумя запросами сделать легко, а как одним уже весь мозг сломал


Содержание

Сообщения в этом обсуждении
"Запрос к mysql не могу победить"
Отправлено Пытливый Ум , 08-Дек-09 18:32 
если mysql поддерживает left outer join, используйте его

"Запрос к mysql не могу победить"
Отправлено PavelR , 08-Дек-09 20:04 
>[оверквотинг удален]
>
>|date_time | ip_from | s_port | ip_to | d_port | bytes |
>
>
>Нужен такой результат
>
>--- ip ---| -in-  | -out-  |
>10.10.1.1 | 50 Mb | 10Mb   |
>
>Двумя запросами сделать легко, а как одним уже весь мозг сломал

соберите два ваших запроса в один, как вложенные подзапросы.


"Запрос к mysql не могу победить"
Отправлено Yuhon , 08-Дек-09 20:39 
>[оверквотинг удален]
>>
>>
>>Нужен такой результат
>>
>>--- ip ---| -in-  | -out-  |
>>10.10.1.1 | 50 Mb | 10Mb   |
>>
>>Двумя запросами сделать легко, а как одним уже весь мозг сломал
>
>соберите два ваших запроса в один, как вложенные подзапросы.

PavelR я пробовал различные комбинации с вложенными запросами и union, но никак не могу к правильному варианту придти. Если не сложно покажите как нужно.

Например запрос для вычисления входящего трафика выглядит так
SELECT ip_to, SUM(bytes) FROM tbl1 WHERE ip_to='10.10.1.1'


"Запрос к mysql не могу победить"
Отправлено PavelR , 08-Дек-09 23:22 
>[оверквотинг удален]
>>>Двумя запросами сделать легко, а как одним уже весь мозг сломал
>>
>>соберите два ваших запроса в один, как вложенные подзапросы.
>
>PavelR я пробовал различные комбинации с вложенными запросами и union, но никак
>не могу к правильному варианту придти. Если не сложно покажите как
>нужно.
>
>Например запрос для вычисления входящего трафика выглядит так
>SELECT ip_to, SUM(bytes) FROM tbl1 WHERE ip_to='10.10.1.1'

SELECT '10.10.1.1', (select SUM(bytes) FROM tbl1 WHERE ip_to='10.10.1.1') as sum_to,
(select SUM(bytes) FROM tbl1 WHERE ip_from='10.10.1.1') as sum_from


помоему этого достаточно. Не пишу запросов к мускулу каждый день.
В запросе к ораклу, например, надо было бы дописать "from dual".


"Запрос к mysql не могу победить"
Отправлено Pahanivo , 09-Дек-09 08:06 
>[оверквотинг удален]
>>>Двумя запросами сделать легко, а как одним уже весь мозг сломал
>>
>>соберите два ваших запроса в один, как вложенные подзапросы.
>
>PavelR я пробовал различные комбинации с вложенными запросами и union, но никак
>не могу к правильному варианту придти. Если не сложно покажите как
>нужно.
>
>Например запрос для вычисления входящего трафика выглядит так
>SELECT ip_to, SUM(bytes) FROM tbl1 WHERE ip_to='10.10.1.1'

это по моему в принципе не сделать одним запросом так как критерии отбора друг другу противоречат
делай двумя


"Запрос к mysql не могу победить"
Отправлено other , 09-Дек-09 08:38 
select '10.10.1.1', sum(if ( ip_from='10.10.1.1', bytes,0)) as bytes_out, sum(if ( ip_to='10.10.1.1', bytes, 0)) as bytes_in from table_name;



"Запрос к mysql не могу победить"
Отправлено PavelR , 09-Дек-09 08:50 
>select '10.10.1.1', sum(if ( ip_from='10.10.1.1', bytes,0)) as bytes_out, sum(if ( ip_to='10.10.1.1', bytes,
>0)) as bytes_in from table_name;

тогда уж можно попробовать добавить

where ip_from = '10.10.1.1' or ip_to = '10.10.1.1'


"Запрос к mysql не могу победить"
Отправлено other , 09-Дек-09 08:55 
>тогда уж можно попробовать добавить
>
>where ip_from = '10.10.1.1' or ip_to = '10.10.1.1'

зачем where когда if есть



"Запрос к mysql не могу победить"
Отправлено PavelR , 09-Дек-09 12:00 
>>тогда уж можно попробовать добавить
>>
>>where ip_from = '10.10.1.1' or ip_to = '10.10.1.1'
>
>зачем where когда if есть

поделайте разные варианты на больших бд. подумайте.
воспользуйтесь explain.


"Запрос к mysql не могу победить"
Отправлено SubGun , 09-Дек-09 12:11 
Какие-то скучные ответы.

SELECT ip_to, SUM(bytes) FROM tbl1 WHERE 1 GROUP BY ip_to


"Запрос к mysql не могу победить"
Отправлено Yuhan , 09-Дек-09 13:12 
>Какие-то скучные ответы.
>
>SELECT ip_to, SUM(bytes) FROM tbl1 WHERE 1 GROUP BY ip_to

Это только входящий