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 поддерживает left outer join, используйте его
>[оверквотинг удален]
>
>|date_time | ip_from | s_port | ip_to | d_port | bytes |
>
>
>Нужен такой результат
>
>--- ip ---| -in- | -out- |
>10.10.1.1 | 50 Mb | 10Mb |
>
>Двумя запросами сделать легко, а как одним уже весь мозг сломалсоберите два ваших запроса в один, как вложенные подзапросы.
>[оверквотинг удален]
>>
>>
>>Нужен такой результат
>>
>>--- 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'
>[оверквотинг удален]
>>>Двумя запросами сделать легко, а как одним уже весь мозг сломал
>>
>>соберите два ваших запроса в один, как вложенные подзапросы.
>
>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".
>[оверквотинг удален]
>>>Двумя запросами сделать легко, а как одним уже весь мозг сломал
>>
>>соберите два ваших запроса в один, как вложенные подзапросы.
>
>PavelR я пробовал различные комбинации с вложенными запросами и union, но никак
>не могу к правильному варианту придти. Если не сложно покажите как
>нужно.
>
>Например запрос для вычисления входящего трафика выглядит так
>SELECT ip_to, SUM(bytes) FROM tbl1 WHERE ip_to='10.10.1.1'это по моему в принципе не сделать одним запросом так как критерии отбора друг другу противоречат
делай двумя
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;
>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'
>тогда уж можно попробовать добавить
>
>where ip_from = '10.10.1.1' or ip_to = '10.10.1.1'зачем where когда if есть
>>тогда уж можно попробовать добавить
>>
>>where ip_from = '10.10.1.1' or ip_to = '10.10.1.1'
>
>зачем where когда if естьподелайте разные варианты на больших бд. подумайте.
воспользуйтесь explain.
Какие-то скучные ответы.SELECT ip_to, SUM(bytes) FROM tbl1 WHERE 1 GROUP BY ip_to
>Какие-то скучные ответы.
>
>SELECT ip_to, SUM(bytes) FROM tbl1 WHERE 1 GROUP BY ip_toЭто только входящий