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

MySQL/PostgreSQL/SQLite/Oracle/M$SQL/....

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
minX65536
проходил мимо
Сообщения: 2
Зарегистрирован: 2007-10-10 11:10:41

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

Непрочитанное сообщение minX65536 » 2007-10-10 11:34:36

вобщем тема такая, завел 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 |
+--------------+-----------+
Последний раз редактировалось Alex Keda 2007-10-10 11:44:21, всего редактировалось 1 раз.
Причина: Товарищщи, юзайте кнопочку [code], цените чужое время...

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

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

Непрочитанное сообщение dikens3 » 2007-10-10 12:26:32

Есть такое понятие в 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) тогда суммируем.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

minX65536
проходил мимо
Сообщения: 2
Зарегистрирован: 2007-10-10 11:10:41

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

Непрочитанное сообщение minX65536 » 2007-10-10 12:36:15

да как обычно ответ на поверхности, про OR то я и не подумал..
а то блин второй день мучаюсь то таблицу новую пытался создать, то средствами php объеденить.

спасибо :D