Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

xyunamx

Otimizar codigo

Recommended Posts

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.