Запрос по траффику по ip, group, bytes

Технические вопросы по UTM 5.0
Ответить
tesla
Сообщения: 37
Зарегистрирован: Ср дек 10, 2008 09:45

Запрос по траффику по ip, group, bytes

Сообщение tesla »

Нашел поиском два запроса.

SELECT id, uname, INET_NTOA(ip & 4294967295) as ip FROM ip_groups;

И собственно второй отчет по ip:

SELECT account_id, slink_id, t_class, SUM(bytes), base_cost, SUM(discount), ipid FROM discount_transactions_iptraffic_all WHERE discount_date>='1246406400' AND discount_date <='1249084800'
GROUP BY t_class,base_cost,account_id,slink_id,ipid order by account_id, ipid, t_class, base_cost;

Как объединить эти 2 запроса чтобы;

1. Вывелась информация о uname, IP адресе и кол-ве потребленного траффика.
2. Данные брались из группы безлимитчиков (в нашем случае '104')

tesla
Сообщения: 37
Зарегистрирован: Ср дек 10, 2008 09:45

Сообщение tesla »

собственно затык в в двух таблицах.

В одной (discount_transactions_iptraffic_all) есть ipid без маски сети, но с кол-вом байт потребленных (bytes).

В другой (ip_groups) есть ip и есть mask, но нет кол-ва байт (bytes)

Нужно узнать сколько скачано по каждому ip адрессу.

integral
Сообщения: 75
Зарегистрирован: Чт авг 14, 2008 14:15

Сообщение integral »

Посмотри мож что выбереш для себя, я там делаю вначале запрос на все активные аккаунты а потом ещё одним запросом вытаскиваю трафик на каждого.. Увы лучче не придумал..

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

<?php

function addopt &#40;$str, $val, $select&#41;
&#123;
  if &#40;$select&#41;
  &#123;
    $ret='<OPTION value='.$val.' selected>'.$str.'</OPTION>';
  &#125; else
  &#123;
    $ret='<OPTION value='.$val.'>'.$str.'</OPTION>';
  &#125;
  
  return $ret;
&#125;

$btn=$_GET&#91;'btn'&#93;;

if &#40;isset&#40;$btn&#41;&#41;
&#123;
  $d1=$_GET&#91;'daystart'&#93;;
  $d2=$_GET&#91;'dayend'&#93;;
  $m1=$_GET&#91;'monthstart'&#93;;
  $m2=$_GET&#91;'monthend'&#93;;
  $y1=$_GET&#91;'yearstart'&#93;;
  $y2=$_GET&#91;'yearend'&#93;;
  
  $daily=$_GET&#91;'daily'&#93;;
&#125; else
&#123;
  $d2=date&#40;"d"&#41;;
  $m1=date&#40;"m"&#41;;
  $m2=$m1;
  $y1=$y2=date&#40;"y"&#41;;
//  echo date&#40;"y"&#41;;
  $d1=mktime&#40;0, 0, 0, $m1, 1, $y&#41;;
  $d1=date&#40;"d",$d1&#41;;
&#125;

print "  <form method=GET action=./>
	 <table width=500 border=1 bgcolor=#739CDB bordercolor=#5283CF cellspacing=0 cellpadding=5>	 
	 <tr>
		<td colspan=2><font color=#880000><b>Внимание, данная операция ресурсоемкая, поэтому в зависимости от заданного интервала времени занимает от 5 до 60 сек.</b></font>
		</td>
	 </tr>
	 <tr>
	 <td>Дата начала&#58;<br>

<SELECT class=text_i name=day1 ONCHANGE=\"form.daystart.value=options&#91;this.selectedIndex&#93;.value\">";

$x=1;
while &#40;$x<32&#41;
&#123; 
  if &#40;$x<10&#41;
  &#123;
    $y='0';
  &#125; else 
  &#123;
    $y='';
  &#125;

  if &#40;$x==$d1&#41;
  &#123;
    print addopt &#40;$y.$x,$x,1&#41;;
  &#125; else
  &#123; 
    print addopt &#40;$y.$x,$x,0&#41;;
  &#125;
  $x++;
&#125;

print '</SELECT>

<SELECT class=text_i name=month1 ONCHANGE="form.monthstart.value=options&#91;this.selectedIndex&#93;.value">';

if &#40;$m1==1&#41; &#123;print addopt &#40;'январь',1,1&#41;;&#125; else &#123;print addopt &#40;'январь',1,0&#41;;&#125;
if &#40;$m1==2&#41; &#123;print addopt &#40;'февраль',2,1&#41;;&#125; else &#123;print addopt &#40;'февраль',2,0&#41;;&#125;
if &#40;$m1==3&#41; &#123;print addopt &#40;'март',3,1&#41;;&#125; else &#123;print addopt &#40;'март',3,0&#41;;&#125;
if &#40;$m1==4&#41; &#123;print addopt &#40;'апрель',4,1&#41;;&#125; else &#123;print addopt &#40;'апрель',4,0&#41;;&#125;
if &#40;$m1==5&#41; &#123;print addopt &#40;'май',5,1&#41;;&#125; else &#123;print addopt &#40;'май',5,0&#41;;&#125;
if &#40;$m1==6&#41; &#123;print addopt &#40;'июнь',6,1&#41;;&#125; else &#123;print addopt &#40;'июнь',6,0&#41;;&#125;
if &#40;$m1==7&#41; &#123;print addopt &#40;'июль',7,1&#41;;&#125; else &#123;print addopt &#40;'июль',7,0&#41;;&#125;
if &#40;$m1==8&#41; &#123;print addopt &#40;'август',8,1&#41;;&#125; else &#123;print addopt &#40;'август',8,0&#41;;&#125;
if &#40;$m1==9&#41; &#123;print addopt &#40;'сентябрь',9,1&#41;;&#125; else &#123;print addopt &#40;'сентябрь',9,0&#41;;&#125;
if &#40;$m1==10&#41; &#123;print addopt &#40;'октябрь',10,1&#41;;&#125; else &#123;print addopt &#40;'октябрь',10,0&#41;;&#125;
if &#40;$m1==11&#41; &#123;print addopt &#40;'ноябрь',11,1&#41;;&#125; else &#123;print addopt &#40;'ноябрь',11,0&#41;;&#125;
if &#40;$m1==12&#41; &#123;print addopt &#40;'декабрь',12,1&#41;;&#125; else &#123;print addopt &#40;'декабрь',12,0&#41;;&#125;

print '</SELECT>

<SELECT class=text_i name=year1 ONCHANGE="form.yearstart.value=options&#91;this.selectedIndex&#93;.value">';

if &#40;$y1=="09"&#41; &#123;print addopt &#40;2009,2009,1&#41;;&#125; else &#123;print addopt &#40;2009,2009,0&#41;;&#125;
if &#40;$y1=="08"&#41; &#123;print addopt &#40;2008,2008,1&#41;;&#125; else &#123;print addopt &#40;2008,2008,0&#41;;&#125;
// if &#40;$y1==2007&#41; &#123;print addopt &#40;2007,2007,1&#41;;&#125; else &#123;print addopt &#40;2007,2007,0&#41;;&#125;
// if &#40;$y1==2006&#41; &#123;print addopt &#40;2006,2006,1&#41;;&#125; else &#123;print addopt &#40;2006,2006,0&#41;;&#125;

print '</SELECT>

	 <td class=text2c>Дата окончания&#58;<br>

<SELECT class=text_i name=day2 ONCHANGE="form.dayend.value=options&#91;this.selectedIndex&#93;.value">';

$x=1;
while &#40;$x<32&#41;
&#123; 
  if &#40;$x<10&#41;
  &#123;
    $y='0';
  &#125; else 
  &#123;
    $y='';
  &#125;

  if &#40;$x==$d2&#41;
  &#123;
    print addopt &#40;$y.$x,$x,1&#41;;
  &#125; else
  &#123; 
    print addopt &#40;$y.$x,$x,0&#41;;
  &#125;
  $x++;
&#125;

print '</SELECT>

<SELECT class=text_i name=month2 ONCHANGE="form.monthend.value=options&#91;this.selectedIndex&#93;.value">';

if &#40;$m2==1&#41; &#123;print addopt &#40;'январь',1,1&#41;;&#125; else &#123;print addopt &#40;'январь',1,0&#41;;&#125;
if &#40;$m2==2&#41; &#123;print addopt &#40;'февраль',2,1&#41;;&#125; else &#123;print addopt &#40;'февраль',2,0&#41;;&#125;
if &#40;$m2==3&#41; &#123;print addopt &#40;'март',3,1&#41;;&#125; else &#123;print addopt &#40;'март',3,0&#41;;&#125;
if &#40;$m2==4&#41; &#123;print addopt &#40;'апрель',4,1&#41;;&#125; else &#123;print addopt &#40;'апрель',4,0&#41;;&#125;
if &#40;$m2==5&#41; &#123;print addopt &#40;'май',5,1&#41;;&#125; else &#123;print addopt &#40;'май',5,0&#41;;&#125;
if &#40;$m2==6&#41; &#123;print addopt &#40;'июнь',6,1&#41;;&#125; else &#123;print addopt &#40;'июнь',6,0&#41;;&#125;
if &#40;$m2==7&#41; &#123;print addopt &#40;'июль',7,1&#41;;&#125; else &#123;print addopt &#40;'июль',7,0&#41;;&#125;
if &#40;$m2==8&#41; &#123;print addopt &#40;'август',8,1&#41;;&#125; else &#123;print addopt &#40;'август',8,0&#41;;&#125;
if &#40;$m2==9&#41; &#123;print addopt &#40;'сентябрь',9,1&#41;;&#125; else &#123;print addopt &#40;'сентябрь',9,0&#41;;&#125;
if &#40;$m2==10&#41; &#123;print addopt &#40;'октябрь',10,1&#41;;&#125; else &#123;print addopt &#40;'октябрь',10,0&#41;;&#125;
if &#40;$m2==11&#41; &#123;print addopt &#40;'ноябрь',11,1&#41;;&#125; else &#123;print addopt &#40;'ноябрь',11,0&#41;;&#125;
if &#40;$m2==12&#41; &#123;print addopt &#40;'декабрь',12,1&#41;;&#125; else &#123;print addopt &#40;'декабрь',12,0&#41;;&#125;

print '</SELECT>

<SELECT class=text_i name=year2 ONCHANGE="form.yearend.value=options&#91;this.selectedIndex&#93;.value">';

if &#40;$y2=="09"&#41; &#123;print addopt &#40;2009,2009,1&#41;;&#125; else &#123;print addopt &#40;2009,2009,0&#41;;&#125;
if &#40;$y2=="08"&#41; &#123;print addopt &#40;2008,2008,1&#41;;&#125; else &#123;print addopt &#40;2008,2008,0&#41;;&#125;

print '</SELECT>
         </td></tr>

         <tr>
	 <td colspan=2 align=center class=text2c>
         <input type=hidden value="'.$d1.'" name=daystart>
         <input type=hidden value="'.$m1.'" name=monthstart>
         <input type=hidden value="'.$y1.'" name=yearstart>

         <input type=hidden value="'.$d2.'" name=dayend>
         <input type=hidden value="'.$m2.'" name=monthend>
         <input type=hidden value="'.$y2.'" name=yearend>
         <input type=hidden value="1" name=btn>
         <input type=hidden value="2" name=mode>
         <input type=hidden value="22" name=type>';

print '  <input type=submit value="Показать"></td>
	 </tr>
	 </table>
         </form>';

$data_1=mktime&#40;0, 0, 0, $m1, $d1, $y1&#41;;
$data_2=mktime&#40;23, 59, 59, $m2, $d2, $y2&#41;;


if &#40;$btn == "1"&#41;
&#123;


    $d=$data_2-$data_1;
    if &#40;$d > 2681999&#41;
    &#123;
	echo $data_1;
	echo "<br>";
	echo $data_2;
	echo "<br>";
	echo "Промежуток выбора дат должен быть не более 1 месяца."; 
	die;
    &#125;

 $q='
	SELECT
		users.id AS uid,
		users.basic_account AS aid,
		users.full_name AS name,
		users.actual_address AS address,
		users.building as dom,
		users.flat_number as kv,
		ip_groups.ip,
		accounts.int_status as status,
		accounts.is_blocked as block
	FROM
		users
		Inner Join accounts ON users.basic_account = accounts.id
		Inner Join service_links ON accounts.id = service_links.account_id
		Inner Join iptraffic_service_links ON service_links.id = iptraffic_service_links.id
		Inner Join ip_groups ON ip_groups.ip_group_id = iptraffic_service_links.ip_group_id
	WHERE
		users.is_deleted = 0 AND
		accounts.is_deleted = 0 AND
		service_links.is_deleted = 0 AND
		iptraffic_service_links.is_deleted = 0 AND
		ip_groups.is_deleted = 0 AND NOT
		users.id IN '.$SkipIDList.'
	ORDER BY
		users.id
	 ';

    		$result=pg_query &#40;$q&#41;;

 print	"<table width=95% border=1 bgcolor=#739CDB bordercolor=#5283CF cellspacing=0 cellpadding=5>
	<tr>
		<td width=30 align=center>id</td>
		<td align=center>Наименование</td>
		<td align=center>Адрес</td>
		<td align=center>IP</td>
		<td align=center>Траффик</td>
		<td align=center>Статус</td>
	</tr>";


	while &#40;$row = pg_fetch_assoc&#40;$result&#41;&#41; 
	&#123;
		

	$uid=$row&#91;'uid'&#93;;
	$name=iconv&#40;"UTF-8","windows-1251", &#40;$row&#91;'name'&#93;&#41;&#41;;
	$address=iconv&#40;"UTF-8","windows-1251", &#40;$row&#91;'address'&#93;&#41;&#41;;
	$dom=iconv&#40;"UTF-8","windows-1251", &#40;$row&#91;'dom'&#93;&#41;&#41;;
	$kv=iconv&#40;"UTF-8","windows-1251", &#40;$row&#91;'kv'&#93;&#41;&#41;;
	$status=$row&#91;'status'&#93;;
	$block=$row&#91;'block'&#93;;


	//Ссылка на профиль
	$linkprofile = "<a href=./?mode=4&uid=".$row&#91;uid&#93;."&aid=".$row&#91;aid&#93;."&type=41 title='Просмотр профиля'>";

		$q1 = '
		SELECT 
		  discount_transactions_iptraffic_all.account_id,
		  Sum&#40;discount_transactions_iptraffic_all.bytes&#41; AS bytes,
		  discount_transactions_iptraffic_all.t_class
		FROM
		  discount_transactions_iptraffic_all
		WHERE
		  discount_transactions_iptraffic_all.account_id = '.$row&#91;aid&#93;.' AND
		  discount_transactions_iptraffic_all.discount_date >= '.$data_1.' AND 
		  discount_transactions_iptraffic_all.discount_date <= '.$data_2.' AND
		  &#40;discount_transactions_iptraffic_all.t_class = 10 OR 
		  discount_transactions_iptraffic_all.t_class = 0&#41;
		GROUP BY
		  discount_transactions_iptraffic_all.account_id,
		  discount_transactions_iptraffic_all.t_class
		';


    		$result1=pg_query &#40;$q1&#41;;
		$traff = 0;

		while &#40;$row1 = pg_fetch_assoc&#40;$result1&#41;&#41; 
		&#123;
		 $traff1 = round&#40;$row1&#91;'bytes'&#93;/1024/1024, 2&#41;;
		 $traff = $traff + $traff1;
		&#125;
		 $traff = str_replace&#40;"." , "," , $traff&#41;;
		 


		if &#40;$status == "1"&#41;
		&#123;

	print	"<tr>
			<td width=30 align=center>&nbsp;".$uid."</td>
			<td align=left>".$linkprofile."<font color=#000000>".$name."</font></a></td>
			<td align=left>&nbsp;".	iconv&#40;"UTF-8","windows-1251", &#40;$row&#91;'address'&#93;&#41;&#41;." ".
						iconv&#40;"UTF-8","windows-1251", &#40;$row&#91;'dom'&#93;&#41;&#41;." ".
						iconv&#40;"UTF-8","windows-1251", &#40;$row&#91;'kv'&#93;&#41;&#41;."</td>
			<td align=left>&nbsp;".long2ip&#40;$row&#91;'ip'&#93;&#41;."</td>
			<td align=right>&nbsp;".$traff."</td>
			<td align=right>Вкл</td>
		</tr>";
		&#125;else&#123;
	print	"<tr>
			<td bgcolor=#746E99 width=30 align=center>&nbsp;".$uid."</td>
			<td bgcolor=#746E99 align=left>".$linkprofile."<font color=#000000>".$name."</font></a></td>
			<td bgcolor=#746E99 align=left><font color=#000000>&nbsp;".	iconv&#40;"UTF-8","windows-1251", &#40;$row&#91;'address'&#93;&#41;&#41;." ".
											iconv&#40;"UTF-8","windows-1251", &#40;$row&#91;'dom'&#93;&#41;&#41;." ".
											iconv&#40;"UTF-8","windows-1251", &#40;$row&#91;'kv'&#93;&#41;&#41;."</font></td>
			<td bgcolor=#746E99 align=left>&nbsp;".long2ip&#40;$row&#91;'ip'&#93;&#41;."</td>
			<td bgcolor=#746E99 align=right>&nbsp;".$traff."</td>
			<td bgcolor=#746E99 align=right>Выкл</td>
		</tr>";

		&#125;


	&#125;
	print	"</table>";

&#125;

?>

tesla
Сообщения: 37
Зарегистрирован: Ср дек 10, 2008 09:45

Сообщение tesla »

Спасиба за помощь, я вот так сделал.

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

SELECT discount_transactions_iptraffic_all.account_id, SUM&#40;bytes&#41; AS bytes,
inet_ntoa&#40;ip_groups.ip & 0xFFFFFFFF&#41; AS ip, inet_ntoa&#40;ip_groups.mask & 0xFFFFFFFF&#41; AS mask
FROM discount_transactions_iptraffic_all
INNER JOIN account_tariff_link INNER JOIN users INNER JOIN ip_groups
WHERE discount_transactions_iptraffic_all.discount_date>=UNIX_TIMESTAMP&#40;'2009-06-01 00&#58;00&#58;00'&#41;
AND discount_transactions_iptraffic_all.discount_date<=UNIX_TIMESTAMP&#40;'2009-07-01 00&#58;00&#58;00'&#41;
AND discount_transactions_iptraffic_all.account_id=account_tariff_link.account_id AND
discount_transactions_iptraffic_all.t_class='10'
AND users.id=account_tariff_link.account_id AND ip_groups.uname=users.login
GROUP BY ip ORDER by bytes;

Ответить