Ir para conteúdo

POWERED BY:

Arquivado

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

horacio2009

agrupamento falho

Recommended Posts

boa tarde , pessoal!! tudo bom?

seguinte, eu montei um sisteminha de troca de mensagens, tipo email, e agora quero juntar todos as mensagens com o mesmo numero de protocolo, porém, esses numeros estão como INT( meio óbvio, mas acho legal mencionar...)e na hora de juntar todos os protocolos iguais eles não juntam...

estou usando esse comando:

 

 

 

$tab=mysql_query("SELECT DISTINCT numero_protocolo, date, quem,destino  FROM $tabela ORDER BY codigo DESC");
           
$linhas=mysql_num_rows($tab);
$x="0";
for($x;$x<$linhas;$x++)
{
$numero_protocolo=mysql_result($tab,$x,'numero_protocolo');
$quem=mysql_result($tab,$x,'quem');
$destino=mysql_result($tab,$x,'destino');

echo"
<tr>
<td>$numero_protocolo</td>
<td>$quem </td>
<td>$destino</td>
</tr>
";
}
mysql_close ($db);
//aqui acaba a primeira query.......................................
?>

até aí, parece certo, mas na hora de imprimir, aparece assim:

 

 

943927200 102 121

943927200 102 117

943927200 102 116

943927200 102 112

943927200 102 109

943927200 102 107

943927200 102 103

943927200 102 87

943927200 102 141

943927200 102 118

943927200 102 100

943927200 100 102

943927200 100 141

943927200 100 118

943927200 100 100

943927200 102 141

943927200 102 118

943927200 102 100

1281586960 100 141

1281586960 100 118

1281586960 100 100

1281586960 141 100

1281586960 141 141

1281586960 141 118

943927200 117 145

943927200 117 141

943927200 117 121

943927200 117 117

 

 

 

só que preciso que apareça dessa forma:

 

1281586960 	141 	118
943927200 	117 	145
apenas esses dois...

bom, o que estou fazendo de errado????

e a forma que estou puxando as informações, e algo errado na pesquisa??? o que acontece???

obrigado a todos!!

horácio

Compartilhar este post


Link para o post
Compartilhar em outros sites

Troque seu código por este abaixo:

 

<?php
$tab = mysql_query ( "SELECT numero_protocolo, date, quem,destino FROM $tabela ORDER BY codigo DESC GROUP BY numero_protocolo" );

while ( $linha = mysql_fetch_assoc ( $tab ) ) 
	printf ( '
<tr>
	<td>%d</td>
	<td>%d</td>
	<td>%d</td>
</tr>', $linha ['numero_protocolo'], $linha ['quem'], $linha ['destino'] );

}
mysql_close ( $db );

Veja que substitui o for por um while na exibição do resultado. Além disto, adicionei um agrupador na consulta (GROUP BY), informando para o MySQL que os resultados devem ser agrupados pelo numero_protocolo (foi o que pude imaginar pelo resultado que você colocou). Sugiro também que você passe a utilizar PDO ou MySQLi, por questões de segurança.

 

Algumas leituras sugeridas:

http://dev.mysql.com/doc/refman/4.1/pt/group-by-functions-and-modifiers.html

http://br.php.net/mysqli

http://br.php.net/pdo

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza Matias...entendi vou testar isso agora mesmo, porém, antes de encerrar isso, por que você substituiu o for pelo while??

eu sempre uso o for quando quero uma listagem, nem estou contestando o que você fez, de forma alguma, mas fiquei curioso, pois eu sei que o while tbm gera lista...mas por que a preferencia??

aliás, reformulando a pergunta...

quando devo usar while e quando devo usar for??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não faça esse tipo de pergunta, "quando devo usar while e quando devo usar for??". É muito melhor você entender o funcionamento do for e do while do que apenas "decorar" situações cabíveis a cada um.

 

Primeiro de tudo, veja que você utiliza a função mysql_result() para percorrer os resultados retornados pela consulta. Porém o próprio manual do PHP já avisa que, em termos de performance, isso é ruim. Então você deve sempre optar pela utilização das funções mysql_fetch_*. Vá até o manual do PHP e leia mais sobre isso.

 

Agora falando o while e do for, não tem muito o que falar hehe porque o que tinha que ser falado já foi falado ;). Aqui:

 

http://www.php.net/manual/pt_BR/control-structures.for.php

http://www.php.net/manual/pt_BR/control-structures.while.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeira frase dos links que o André D. Molin indicou.

for loops are the most complex loops in PHP.

while loops are the simplest type of loop in PHP.

Acho que isto resume bem. ;)

 

Carlos Eduardo

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.