Ir para conteúdo

Arquivado

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

cafdesigner

Tratar while para nao exibir registros repetidos

Recommended Posts

Pessoal estou montando um scipt pra mostrar os operadores onlines em um sistema.

 

Fiz uma condiçao de que se houver mais de uma pessoa logado com o mesmo login, ele colocar o total de pessoas na frente do nome ex: Meu nome (2)

 

Só que tem um detalhe, no while ele mostra certinho isso mas ele repete o nome do usuario entao fica assim:

Meu nome (2)

Meu nome (2)

 

Se for 3 pessoas logadas com o mesmo login:

Nome (3)

Nome (3)

Nome (3)

 

E o correto, como tem 2 pessoas logadas com o mesmo login, deveria exibir apenas:

Nome (2)

ou

Nome (3)

 

Codigo:

$sql_online = mysql_query("SELECT * FROM $tabela_operadores_online");while ($reg_online = mysql_fetch_array($sql_online)) {$total_operador = mysql_num_rows(mysql_query("SELECT * FROM $tabela_operadores_online where login = '".$dados_operadores[nome]."'"));if($total_operador <= 1) {echo "<tr><td width=\"25\" height=\"20\" style=\"padding-left:5px\"><div align=\"right\"><img src=\"img/icones/operador.png\" /></div></td><td height=\"20\" style=\"padding-left:3px\"><div align=\"left\" class=\"texto_4a\">".$reg_online[login]."</div></td></tr>";} else {echo "<tr><td width=\"25\" height=\"20\" style=\"padding-left:5px\"><div align=\"right\"><img src=\"img/icones/operador.png\" /></div></td><td height=\"20\" style=\"padding-left:3px\"><div align=\"left\" class=\"texto_4a\">".$reg_online[login]." (".$total_operador.")</div></td></tr>";}}

Como posso tratar isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu faria o seguinte: colocaria o resultado da consulta em arrays, como:

 

$online['login'] = (número de usuários online com esse login);

 

Após isso, usaria array_count_values() para verificar o número de usuários com o mesmo login

 

Abraços,

Beraldo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você usar array, como eu disse, deverá utilizar while.

Outra forma que não me veio à cabeça antes é usar esta query:

 

Select distinct(nome), count(nome) from user group by nome

 

Ela retorna o nome do usuário e quantas vezes ele consta na tabela.

 

Abraços,

Beraldo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei fazer assim:

 

$sql_online = mysql_query("SELECT distinct(login), count(login) FROM $tabela_operadores_online group by login");while ($reg_online = mysql_fetch_array($sql_online)) {$total_operador = mysql_num_rows(mysql_query("SELECT * FROM $tabela_operadores_online where login = '".$reg_online[login]."'"));if($total_operador <= 1) {echo "<tr><td width=\"25\" height=\"20\" style=\"padding-left:5px\"><div align=\"right\"><img src=\"img/icones/operador.png\" /></div></td><td height=\"20\" style=\"padding-left:3px\"><div align=\"left\" class=\"texto_4a\">".$reg_online[login]."</div></td></tr>";} else {echo "<tr><td width=\"25\" height=\"20\" style=\"padding-left:5px\"><div align=\"right\"><img src=\"img/icones/operador.png\" /></div></td><td height=\"20\" style=\"padding-left:3px\"><div align=\"left\" class=\"texto_4a\">".$reg_online[login]." (".$total_operador.")</div></td></tr>";}}

Em partes ele funcionou:

 

-Demo

-Demo2 (2)

 

Mas se tive mais que 3 pessoas(pelo menos foi o maximo que testei) ele repete o nome que tem 3 pessoas mas deixa em branco:

 

-

-Demo

-Demo2 (2)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não precisa fazer aquela consulta dentro do while. Teste assim:

 

$sql_online = mysql_query("SELECT distinct(login) as login, count(login) as total FROM $tabela_operadores_online group by login");

while ($reg_online = mysql_fetch_array($sql_online)) {

echo "<tr>
<td width=\"25\" height=\"20\" style=\"padding-left:5px\">
<div align=\"right\">
<img src=\"img/icones/operador.png\" />
</div>
</td>
<td height=\"20\" style=\"padding-left:3px\">
<div align=\"left\" class=\"texto_4a\">" . $reg_online['login']." (". $reg_online['total'] .")
</div>
</td>
</tr>";
}

Veja se é assim que você quer que fique.

 

Abraços,

Beraldo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beraldo mas nao tem como criar uma condiçao, de que se tiver apenas uma pessoa logada com o determinado login, nao aparecera o total(1) ?Por isso tava usando akele if().Ex:-Eu-Você (2)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dá sim. Claro! :D

Mas não precisa fazer uma nova consulta; basta verificar o valor da variável $reg_online['total'].

 

$sql_online = mysql_query("SELECT distinct(login) as login, count(login) as total FROM $tabela_operadores_online group by login");while ($reg_online = mysql_fetch_array($sql_online)) {echo "[tr]<td width=\"25\" height=\"20\" style=\"padding-left:5px\"><div align=\"right\"><img src=\"img/icones/operador.png\" />

" . $reg_online['login'].

(($reg_online['total'] > 1) ? "(". $reg_online['total'] .")" : "") .

"

[/tr]";

}

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.