Страница 1 из 1

помогите плз запрос составить с взаимоисключающими условиями

Добавлено: 2007-10-10 11:34:36
minX65536
вобщем тема такая, завел trafd по статье товарисча лиса (спасибо, очень доходчиво написано). все работает нормально, но в моей сети есть прокси сервер который нужно считать отдельно.
вобщем проще показать базу и пару запросов которые я нарисовал:

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

+---------+------------+----------+----------------+--------------+-----------------+------------+----------+----------+-----------+
| unic_id | date       | time     | from_IP        | port_from_IP | to_IP           | port_to_IP | protocol | bytes    | all_bytes |
+---------+------------+----------+----------------+--------------+-----------------+------------+----------+----------+-----------+
|       1 | 2007-10-01 | 18:49:00 | 213.180.204.8 | client       | 192.168.1.10     | 80         | tcp      |     8580 |      9252 |
|       2 | 2007-10-01 | 18:49:00 | 213.180.204.8  | client       | 192.168.1.10     | 80         | tcp      |     5549 |      6117 |
|       3 | 2007-10-01 | 18:49:00 | 194.67.57.26 | 80           | 192.168.1.10     | client     | tcp      |    11452 |     13244 |
|       4 | 2007-10-01 | 18:49:00 | 192.168.1.10 | 3128           | 192.168.1.50    | client     | tcp      |     3269 |      3605 |
|       5 | 2007-10-01 | 18:49:00 | 192.168.1.10    | 80          | 194.67.57.26     | client     | tcp      | 212259 |  233483 |
+---------+------------+----------+----------------+--------------+-----------------+------------+----------+----------+-----------+
из php файлика:

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

// вытаскиваем общий входящий траффик
$sql1 = mysql_query("SELECT to_IP, SUM(bytes) AS `bytes` FROM int0_2007 WHERE
to_IP LIKE '" . $ip . "' // например 192.168.1.10
AND `date` LIKE '" . $curr_month . "-%'
AND from_IP NOT LIKE '" . $ip_internal_servera . "' // 192.168.1.50
AND from_IP NOT LIKE '" . $ip_out_servera . "'
GROUP BY to_IP");

// вытаскиваем входящий трафик из прокси
$sql2 = mysql_query("SELECT to_IP, SUM(bytes) AS `bytes` FROM int0_2007 WHERE
to_IP LIKE '" . $ip . "' // например 192.168.1.10
AND `date` LIKE '" . $curr_month . "-%'
AND from_IP LIKE '" . $ip_internal_servera . "'  // 192.168.1.50
AND port_from_IP LIKE '3128'
AND from_IP NOT LIKE '" . $ip_out_servera . "'
GROUP BY to_IP");
результаты запросов выглядят ну например так:

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

+--------------+-----------+
| to_IP        | bytes     |
+--------------+-----------+
| 192.168.1.10 | 12 |
+--------------+-----------+
и

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

+--------------+-----------+
| to_IP        | bytes     |
+--------------+-----------+
| 192.168.1.10 | 13 |
+--------------+-----------+
так вот вопрос, как одним запросом сложить результаты тех двух которые я написал выше, чтобы получилось:

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

+--------------+-----------+
| to_IP        | bytes     |
+--------------+-----------+
| 192.168.1.10 | 25 |
+--------------+-----------+

Re: помогите плз запрос составить с взаимоисключающими ус

Добавлено: 2007-10-10 12:26:32
dikens3
Есть такое понятие в mysql - это каким образом будут обрабатываться AND, OR, NOT. КТо из них первым, кто втроым и т.д. Тебе стоит об этом почитать, но на твой вопрос я отвечу.

Использовать нужно скобки и условие OR в твоём случае.

Имеем (Было):

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

AND from_IP NOT LIKE '" . $ip_out_servera . "' AND ....
Надо(стало):

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

AND ( from_IP NOT LIKE '" . $ip_out_servera . "' OR (from_IP LIKE '" . $ip_internal_servera . "' AND port_from_IP LIKE '3128')) AND ...
Подробнее:
Образно примем конструкцию:

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

from_IP NOT LIKE '" . $ip_out_servera . "'
равной 1
И другие:

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

from_IP LIKE '" . $ip_internal_servera . "'
равной 2

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

port_from_IP LIKE '3128'
Равно 3

Твои запросы выглядят так:
1. Если то-то и 1, тогда суммируем
2. Если то-то и 2 и 3, тогда суммируем

Мой пример демонстрирует следующее:
1. Если то-то и (1 или (2 и 3)) тогда суммируем.
Возможен вариант без вторых скобок:
1. Если то-то и (1 или 2 и 3) тогда суммируем.

Re: помогите плз запрос составить с взаимоисключающими ус

Добавлено: 2007-10-10 12:36:15
minX65536
да как обычно ответ на поверхности, про OR то я и не подумал..
а то блин второй день мучаюсь то таблицу новую пытался создать, то средствами php объеденить.

спасибо :D