Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa Tarde pessoal, tudo tranquilo?
Seguinte, estou com um probleminha ao percorrer While entre tabelas relacionadas com INNER JOIN.
Tenho duas tabelas e relacionei elas normalmente assim:
$pesquisar = "SELECT * FROM tb_cad_cli_condominio INNER JOIN tb_cad_cli_apartamento ON tb_cad_cli_condominio.pk_cli_condominio = pk_cli_condominio_id";
$query = mysql_query($pesquisar);
Ai, fui fazer o While para percorrer os dados, ASSIM:
while ($linha = mysql_fetch_assoc($query)){
print $linha['nome_predio']."<br />";
print $linha['nome_cliente_apartamento']."<br />";
}
Até ai tudo bem, ele fez tudo certinho.
e me trouxe um resultado assim:
NOME PRÉDIO 1
cliente do prédio 1
NOME PRÉDIO 1
outro cliente do prédio 1
NOME PRÉDIO 2
cliente do prédio 2
Está funcionando normalmente o relacionamento, onde ele trás os clientes de cada prédio. Mas gostaria de saber como fazer para ele trazer só uma vez o nome do prédio, e em seguida todos os seus clientes. mais ou menos assim:
NOME PRÉDIO 1
cliente do prédio 1
outro cliente do prédio 1
E assim sucessivamente. Deu pra entender?
Valew pessoal, se alguem poder me ajudar, agradeço..
Abraços!
Aproveitando o tópico, deixa eu fazer uma pergunta de iniciante.
Se ele inserir no final da query um group by id_nome_predio não da certo ?
E ai Eliseu, valew a resposta, ainda nao tentei fazer dessa forma, mais ja tento, ai comento aqui o que deu.
e André, o fato de ser fácil pra voce, não significa que é fácil pra mim, mais vamos lá, poderia me explicar o que é esse group by?
Abraços!
Ou então você pode fazer assim:
$pesquisar = "SELECT * FROM tb_cad_cli_condominio
INNER JOIN tb_cad_cli_apartamento ON tb_cad_cli_condominio.pk_cli_condominio = pk_cli_condominio_id
ORDER BY nome_predio";
$query = mysql_query($pesquisar);
$ultimo_nome_predio = ""; if ( $ultimo_nome_predio != $linha['nome_predio'] ){
print $linha['nome_predio']."<br />";
$ultimo_nome_predio = $linha['nome_predio'];
}
print $linha['nome_cliente_apartamento']."<br />";
}
Ordenei pelo campo nome_predio,
A variável $ultimo_nome_predio determina qual foi o último "nome_predio" exibido
Antes de inserir, ele verifica se o atual é diferente do último "nome_predio" exibido
Se sim, então exibe e indica que esse é o último "nome_predio" exibido
Caso contrário, não exibe nada, apenas o "cliente_apartamento"
Não testei na prática, mas deve funcinar ;)
edit
No entanto, eu prefiro o método do Eliseu M. mesmo
Desculpa editei o post #3 pois ficou mal interpretado, eu me referia a 'minha pergunta' ^_^
Então coloca no final da query um GROUP BY id_nome_predio , onde id_nome_predio é o id da tabela onde está o campo nome_predio.
$pesquisar = "SELECT * FROM tb_cad_cli_condominio INNER JOIN tb_cad_cli_apartamento ON tb_cad_cli_condominio.pk_cli_condominio = pk_cli_condominio_id GROUP BY idnome_predio";
A forma que o Eliseu postou vai dar certo, mas tenta fazer assim p/ ver antes :thumbsup:
E ai pessoal,
testei usando o order by do exemplo do Denis_Uyeda,
deu certinho.
Valew pela ajuda ai, o que eu puder ajudar contem comigo. :)
Até mais Galera, abraços!
Hmm...
Você pode fazer duas queries.
SELECT nome_predio FROM tabela
Então, dentro do while dessa query acima, você terá a variável $linha['nome_predio']; que será usada na próxima:
while ($linha = mysql_fetch_assoc($query)) { while ($linha2 = mysql_fetch_assoc($query2)) {Espero que tenha entendido. Falou!