сабж собственно.
знаю, что есть таблица traf_serv_tclasses.
как зная логин (ip-адрес, сервисная связка.....) вытащить количество предоплаченного трафика из базы для этого пользователя?
Спасибо!
как вытащить количество предоплаченного трафика из базы?
Perl, PostgreSQL
Код: Выделить всё
sub
get_prepaid_traffic {
my $query1 = "SELECT service_id FROM service_links WHERE account_id=$_[1] AND is_deleted=0;";
my $sth1 = $_[0]->prepare($query1) or die "Couldn't prepare statement: ".$_[0]->errstr;
$sth1->execute() or die "Couldn't execute statement: ".$sth1->errstr;
my @tmp;
my $i=0;
my @service_id;
while (@tmp = $sth1->fetchrow_array ) {
@service_id[$i++] = @tmp[0];
}
$sth1->finish();
my $query2 = "SELECT tst_id FROM iptraffic_services_data WHERE id=$service_id[0] AND null_service_prepaid=0 AND is_deleted=0;";
my $sth2 = $_[0]->prepare($query2) or die "Couldn't prepare statement: ".$_[0]->errstr;
$sth2->execute() or die "Couldn't execute statement: ".$sth2->errstr;
my $tst_id = $sth2->fetchrow_array();
$sth2->finish();
if ( $tst_id > 0 ) {
my $query3 = "SELECT traf_serv_tclasses.prepaid_units ".
"FROM traf_serv_tclasses INNER JOIN t_class ON traf_serv_tclasses.tclass_id=t_class.id ".
"WHERE tst_id=$tst_id;";
my $sth3 = $_[0]->prepare($query3) or die "Couldn't prepare statement: ".$_[0]->errstr;
$sth3->execute() or die "Couldn't execute statement: ".$sth3->errstr;
my $prepaid = $sth3->fetchrow_array();
$sth3->finish();
return $prepaid+$_[3]-$_[2] if $prepaid > 0;
} else {
return 0;
}
}
собственно пользуясь дебагом утм-а
сделал такой запрос:
SELECT users.login,yy.tclass_id,yy.prepaid_units,service_links.service_id, inet_ntoa(tt.ipid & 0xffffffff) AS ip FROM users,traf_serv_tclasses AS yy, iptraffic_services_data AS ii, service_links,discount_transactions_iptraffic_all AS tt WHERE users.id=service_links.user_id AND service_links.id=tt.slink_id AND discount_date>='1235844000' AND discount_date <='1238518799' AND inet_ntoa(tt.ipid & 0xffffffff) like '192.168.%' AND ii.id=service_links.service_id AND ii.tst_id=yy.tst_id AND yy.tclass_id=10 GROUP BY ipid INTO OUTFILE '/var/tmp/ttt.txt';
даты может и не нужны... не знаю... но вроде работает
выводит список логинов на каждый ip, класс предоплаченного трафика, предоплаченные байты,сервисную связку для ip-шников вида 192.168.xxx.xxx.
сделал такой запрос:
SELECT users.login,yy.tclass_id,yy.prepaid_units,service_links.service_id, inet_ntoa(tt.ipid & 0xffffffff) AS ip FROM users,traf_serv_tclasses AS yy, iptraffic_services_data AS ii, service_links,discount_transactions_iptraffic_all AS tt WHERE users.id=service_links.user_id AND service_links.id=tt.slink_id AND discount_date>='1235844000' AND discount_date <='1238518799' AND inet_ntoa(tt.ipid & 0xffffffff) like '192.168.%' AND ii.id=service_links.service_id AND ii.tst_id=yy.tst_id AND yy.tclass_id=10 GROUP BY ipid INTO OUTFILE '/var/tmp/ttt.txt';
даты может и не нужны... не знаю... но вроде работает
выводит список логинов на каждый ip, класс предоплаченного трафика, предоплаченные байты,сервисную связку для ip-шников вида 192.168.xxx.xxx.