Официальный сайт студ.городка НГТУ
Программирование и БД » sql запрос 

#1  09.02.08 20:03

sql запрос

хм.. люди, помогите человеку разобраться вот в чем.. SQL знаю не очень хорошо пока..
короче есть база на роутере, хранит пользовательский трафик, снятый с интерфейсов
нужно подсчитать весь трафик проходящий через интерфейс за день, но не учитывая трафик к роутеру
играемся с полями to_IP, from_IP, bytes из таблицы rl0_2008, ip роутера 192.168.0.250
пробовал делать что то вроде такого, не работает.. логика нарушена в запросе явно :(

Код::

SELECT SUM(bytes) FROM rl0_2008 WHERE date='2008-02-09' AND (from_IP!='192.168.0.250' OR to_IP!='192.168.0.250')

выдает явно не то, что ожидалось :(..
подскажите как правильно реализовать такую весчь.. новичок епта :)

Offline

#2  09.02.08 21:28

Re: sql запрос

GreenDay, выложи структуру таблицы.

Offline

#3  09.02.08 21:47

Re: sql запрос

CREATE TABLE \`${iface}_${year}\`
(\`unic_id\` INT(16) NOT NULL AUTO_INCREMENT, \
\`date\` DATE NOT NULL, \`time\` TIME NOT NULL, \
\`from_IP\` CHAR(16) NOT NULL, \`port_from_IP\` CHAR(8) NOT NULL, \
\`to_IP\` CHAR(16) NOT NULL, \`port_to_IP\` CHAR(8) NOT NULL, \
\`protocol\` ENUM('icmp','tcp','udp') NOT NULL, \`bytes\` int(16) NOT NULL, \
\`all_bytes\` int(16) NOT NULL, \
PRIMARY KEY (\`unic_id\`), \
KEY \`date\`(\`date\`)

извиняюсь, вставил как есть.. редактить некогда :)

Offline

#4  09.02.08 21:54

rzk
Профиль

Re: sql запрос

GreenDay написал(а):

(from_IP!='192.168.0.250' OR to_IP!='192.168.0.250')

выполняется при from_IP!=to_IP
Это не sql - это матлогика
наверное тебе нужен запрос:

GreenDay написал(а):

(from_IP!='192.168.0.250' AND to_IP!='192.168.0.250')

Offline

#5  09.02.08 22:04

Re: sql запрос

rzk, неа, там структура как раз такая, что считаются отдельно байты исходящие и входящие..
если сделать как ты предлагаешь, он выдас NULL - ибо невозможно в одной строке совпадение to_IP и from_IP

Offline

#6  09.02.08 22:35

Re: sql запрос

GreenDay написал(а):

выдает явно не то, что ожидалось

а что выдает?

Offline

#7  09.02.08 22:42

Re: sql запрос

выдает то же самое, что при запросе

Код::

SELECT SUM(bytes) FROM rl0_2008 WHERE date='2008-02-09'

Offline

#8  09.02.08 22:45

Re: sql запрос

если убрать скобки, выдает больше сумму, чем при запросе только по дате
получается типа сумма этого запроса

Код::

SELECT SUM(bytes) FROM rl0_2008 WHERE date='2008-02-09' AND from_IP!='192.168.0.250'

складывается с этим

Код::

SELECT SUM(bytes) FROM rl0_2008 WHERE to_IP!='192.168.0.250'

то есть там сумма всплывает за все дни О_о

Offline

#9  09.02.08 22:52

Re: sql запрос

SELECT * FROM rl0_2008 WHERE date='2008-02-09' and (to_IP='192.168.0.250' or from_IP='192.168.0.250') что дает?

Offline

#10  09.02.08 23:02

Re: sql запрос

Код::

||   83650 | 2008-02-09 | 14:20:00 | 192.168.0.250 | 53           | 192.168.0.198 | client     | udp      |        3974 |        4534 |
|   83677 | 2008-02-09 | 14:25:00 | 192.168.0.250 | 138          | 192.168.0.255 | 138        | udp      |        9826 |       11282 |
|   83678 | 2008-02-09 | 14:25:00 | 192.168.0.250 | 139          | 192.168.0.8   | client     | tcp      |     7283474 |    62385042 |
|   83680 | 2008-02-09 | 14:25:00 | 192.168.0.8   | client       | 192.168.0.250 | 139        | tcp      |  1874377646 |  1927343854 |
|   83703 | 2008-02-09 | 14:30:00 | 192.168.0.250 | 138          | 192.168.0.255 | 138        | udp      |        3760 |        4320 |
|   83704 | 2008-02-09 | 14:30:00 | 192.168.0.250 | 139          | 192.168.0.8   | client     | tcp      |     2161186 |    76651030 |

это часть ессно..
и ещ заметил такое О_о

Код::

|   83706 | 2008-02-09 | 14:30:00 | 192.168.0.8   | client       | 192.168.0.250 | 139        | tcp      | -1709202780 | -1636891580 |

Исправлено GreenDay (09.02.08 23:03)

Offline

#11  10.02.08 02:08

rzk
Профиль

Re: sql запрос

rzk написал(а):

(from_IP<>'192.168.0.250' AND to_IP<>'192.168.0.250')

GreenDay написал(а):

если сделать как ты предлагаешь, он выдас NULL - ибо невозможно в одной строке совпадение to_IP и from_IP

выдаст строки, где from_IP и to_IP не равны '192.168.0.250'.

GreenDay написал(а):

|   83706 | 2008-02-09 | 14:30:00 | 192.168.0.8   | client       | 192.168.0.250 | 139        | tcp      | -1709202780 | -1636891580

попробуй int(32) в столбцах bytes и all_bytes

Исправлено rzk (10.02.08 03:35)

Offline

#12  10.02.08 02:10

Re: sql запрос

rzk, ну вот выше пост смотри, если твое условие там подойдет - сделаю :))

Offline

#13  10.02.08 10:44

Re: sql запрос

блин.. опять же еще более логически верный запрос дал "отрицательный" результат..

Код::

SELECT SUM(bytes) FROM rl0_2008 WHERE (date='2008-02-10' AND to_IP<>'192.168.0.250') OR (date='2008-02-10' AND from_IP<>'192.168.0.250')

Offline

#14  10.02.08 11:57

Re: sql запрос

Тип полей from_IP и to_IP - char(16), максимум IP адрес может занимать 3х4 + 3 = 15 байт, это означает, что все IP адреса в этих полях дополняются пробелами. При сравнении это может дать ошибку. Можно попробовать:
1. Делать RTRIM
2. сделать тип полей IP varchar'ом
Попробуй

Offline

#15  10.02.08 14:20

Re: sql запрос

Мерзкий, ну тогда глупый вопрос, как изменить тип данных.. и повлияет ли это на уже имеющиеся данные? :)

Offline

#16  10.02.08 18:18

Re: sql запрос

На уже имеющиеся не повлияет. Можно изменить тип данных или делать CAST.
Попробуй для начала приведение типов, а потом уже, если дело окажется в этом, изменишь тип данных поля в исходной таблице.

Offline

#17  13.02.08 22:47

Re: sql запрос

ну как?

Offline

#18  14.02.08 13:26

Re: sql запрос

rzk был прав.. я ступил... там AND все делается, так что все нормально.. все работает :)
но терь другая проблема, уже в php..

Код::

<?php
// вытаскиваем статистику по пользователям из БД
$sql = mysql_query("SELECT to_IP, SUM(bytes) AS `bytes` FROM
`" . $IF_internal_servera . "_" . date(Y,time()) . "` WHERE `date`
LIKE '" . $old_month . "-%' AND from_IP != '" . $ip_out_servera . "' AND
to_IP != '" . $ip_out_servera . "' AND `to_IP` != '" . $ip_internal_servera . "'
AND `from_IP` != '" . $ip_internal_servera . "' AND `to_IP` LIKE
'" . $lan_mask . "%' GROUP BY `to_IP` ORDER BY `bytes` DESC");
// Строим табличку по тем кого достали
// вытаскиваем рейтинг страниц из БД
while ($d = mysql_fetch_assoc($sql)) {
    // собственно тут вывод результатов.
    $bytes = $d['bytes'] /1048576;
    $bytes = round($bytes, 2);
    $user_name = $users [$d ['to_IP']];
       if (!isset ($user_name))
        $user_name = '<b>Неизвестный</b>';
    ?>

еще запросы хочу прикрутить, чтобы отдельно ftp, http, icq, smtp, pop трафик считать, запросы то сами запросто сделать могу.. а вот как в цикл прикрутить эту весчь хз.. в php пока что ламер, скрипты не мои.. переделываю :)

Исправлено GreenDay (14.02.08 13:28)

Offline

Программирование и БД » sql запрос 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.215 сек.
Выполнено 14 запросов.