xyunamx 0 Denunciar post Postado Agosto 30, 2016 Bom dia a todos... Tenho um free radius instalado, onde grava num mysql todo o histórico de loguins bem sucedidos, bem, como outras informações. Criei uma pagina em php q conta quantas vezes o mesmo usuário conectou(pra ajudar a a descobrir clientes com problema)... ainda falta alguns ajustes mas esta rodando. Segue o codigo: <?php include('cominho'); //incluindo conexao com banco de dados $res = mysql_query("SELECT distinct(UserName) as UserName from radacct ") or die(mysql_error()); $array = array(); while($row=mysql_fetch_array($res)) { $username = $row["UserName"]; $res_conta = mysql_query("SELECT count(UserName) as UserName from radacct WHERE UserName='$username' "); $ctr = mysql_query("SELECT NASIPAddress,RadAcctId from radacct where UserName='$username' ORDER BY RadAcctId DESC LIMIT 1 "); $ctr = mysql_fetch_array($ctr); $row_conta = mysql_fetch_array($res_conta); $linha = array( 'nome' => $username, 'quedas' => $row_conta["UserName"], 'concentrador' => $ctr["NASIPAddress"] ); $array[] = $linha; } //Ordena o Array pelo numero de quedas{ // Compara se $a é maior que $b function cmp($a, $b) { return $a['quedas'] < $b['quedas']; } // Ordena usort($array, 'cmp'); // Mostra os valores echo '<pre>'; print_r( $array); echo "<br>"; ?> 1 - queria saber se tem alguma maneira de fazer apenas uma consulta ao DB 2 - queria ordenar os dados ja vindos do DB pelo quantidade de vezes que o mesmo usuario efetuou loguin(cada loguin cria uma nova linha na tabela) 2 - queria separar os dados da array e formata-los dentro de uma tabela, ex: | nome | numero de loguins | CTR | fulano | 100 | 192.168.0.1 | ciclano | 800 |10.0.50.1 Se alguem ai tiver alguma dica, ou algum material pra poder estudar e chegar ao resultado q quero eu agradeço Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Agosto 31, 2016 Bem-vindo ao fórum! :)Recomendo que leia as regras e orientações de participação Evite consultas dentro de loop, que geram o famoso Problema do N + 1. Veja: http://rberaldo.com.br/o-problema-do-n-mais-1/ PS: funções mysql_* estão obsoletas desde o PHP 5.5 e já foram removidas no PHP 7. Prefira usar MySQLi ou PDO. Veja mais aqui: http://rberaldo.com.br/mysql-obsoleto-php/ Compartilhar este post Link para o post Compartilhar em outros sites
xyunamx 0 Denunciar post Postado Agosto 31, 2016 vou dar uma lida, obrigado Compartilhar este post Link para o post Compartilhar em outros sites
xyunamx 0 Denunciar post Postado Agosto 31, 2016 Depois de batalhar bastante consegui da uma melhorada... ainda esta com mysql, mas em breve mudo isso tbm> Segue o Código que consegui, caso alguém precise de algo parecido. <?php ##################### ##Abrindo o Cabecario da tabela include(' CAMINHO '); $sql_01=mysql_query("SELECT Count(radacct.UserName), radacct.UserName, radacct.NASIPAddress, radacct.AcctStartTime, radacct.FramedIPAddress FROM radacct WHERE radacct.FramedIPAddress != '' GROUP BY radacct.UserName ORDER BY Count(radacct.UserName) DESC ") or die(mysql_error()); $num_rows = mysql_num_rows($sql_01); print_r ("</table><hr> Foram emcontrados $num_rows loguins diferentes.<hr>"); echo " <table border=1> <tr> <td align=center>loguin PPPoE</td> <td align=center> Concentrador IP </td> <td align=center>Contagem de conexoes </td> <td align=center>Ultima autenticacao </td> <td align=center>Ultimo IP </td> </tr> "; while ($sql_02 = mysql_fetch_array($sql_01)){ echo " <tr> <td align=center>". $sql_02[1] ."</td> <td align=center>". $sql_02[2] ."</td> <td align=center>". $sql_02[0] ."</td> <td align=center>". $sql_02[3] ."</td> <td align=center>". $sql_02[4] ."</td> </tr> "; } ?> PS: Utilizei o NAVICATE para criar a SQL. Compartilhar este post Link para o post Compartilhar em outros sites
Paulo de Tarso F. M. 24 Denunciar post Postado Setembro 1, 2016 Apenas dando um "tapa" no seu código mesmo, veja como é difícil migrar para MySQLi: <?php ##################### ##Abrindo o Cabecario da tabela include(' CAMINHO '); $sql_01=mysqli_query($conexao, "SELECT Count(radacct.UserName), radacct.UserName, radacct.NASIPAddress, radacct.AcctStartTime, radacct.FramedIPAddress FROM radacct WHERE radacct.FramedIPAddress != '' GROUP BY radacct.UserName ORDER BY Count(radacct.UserName) DESC ") or die(mysqli_error($conexao)); $num_rows = mysqli_num_rows($sql_01); print_r ("</table><hr> Foram emcontrados $num_rows loguins diferentes.<hr>"); echo " <table border=1> <tr> <td align=center>loguin PPPoE</td> <td align=center> Concentrador IP </td> <td align=center>Contagem de conexoes </td> <td align=center>Ultima autenticacao </td> <td align=center>Ultimo IP </td> </tr> "; while ($sql_02 = mysqli_fetch_row($sql_01)){ echo " <tr> <td align=center>". $sql_02[1] ."</td> <td align=center>". $sql_02[2] ."</td> <td align=center>". $sql_02[0] ."</td> <td align=center>". $sql_02[3] ."</td> <td align=center>". $sql_02[4] ."</td> </tr> "; } ?> Alterei de mysql_fetch_array para mysqli_fetch_row, pois se você acessará os itens pelo índice numérico, não precisará do índice associativo... Agora, para efetuar a conexão com MySQLi: $conexao = @mysqli_connect("hostname", "username", "password"); if(mysqli_connect_errno()) { die(mysqli_connect_error()); } elseif(!@mysqli_select_db($conexao, "database_name")) { die(mysqli_error($conexao)); } Compartilhar este post Link para o post Compartilhar em outros sites