Jump to content

Archived

This topic is now archived and is closed to further replies.

Sasdelli Informática

[Resolvido] SQL Group BY

Recommended Posts

Bom dia Pessoal, tudo bom?

 

Seguinte, eu tenho uma consulta em SQL feita com INNER JOIN e ORDER BY:

 

     $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";     

 

bom, nesta consulta estou conseguindo trazer os dados que eu preciso corretamente onde me informa os os apartamentos de cada condomínio =D

 

mais além disso preciso trazer a contagem de quantos apartamentos tem em cada condomínio. eu pesquisei e fiquei sabendo que com GROUP BY junto com COUNT dentro do SQL isso é possível.

 

alguem pode me ajudar? preciso trazer quantos condomínios tem em cada apartamento (numero) e mostrar os apartamentos que fazem parte do condominio (nomes).

 

Será que tudo isso na mesma consulta é possível? ou terei que fazer uma nova consulta?

 

Valew pessoal...

 

Abraços!

Share this post


Link to post
Share on other sites

Imagino que esteja trabalhando com MySQL. Portanto, para ter mais chances de esclarecer sua dúvida, poste na área correta: iMasters Fóruns -> MySQL

 

Daniel, obrigado pelo post.. vou posta lá, não sabia que tinha um fórum de MySQL.

 

Obrigado.. abraços!

Share this post


Link to post
Share on other sites

Bom pessoal, valew pelo post.

 

consegui retornar a contagem de apartamentos em cada condominio fazendo assim:

 

$count = "SELECT count(*) as total 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 nome_predio";

 

a dúvida agora é a seguinte.

 

Eu tenho um while que começa a montar a tabela, só que chega em uma célula da tabela que eu tenho que mostrar esse numero que de apartamentos do condominio.

 

Então dentro do meu primeiro while, eu fiz outra consulta e outro while: tudo isso dentro de uma célula da tabela.

 

Bom, deu certo, porém esse segundo while, traz dentro da mesma célula a quantidade dos apartamentos de todos os condominios:

 

A pergunta é: tem alguma forma de fazer esse while trazer 1 por 1 em cada volta do primeiro while?

 

O código do segundo while está logo abaixo:

 

Abraços!

 

 $count = "SELECT count(*) as total 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 nome_predio";
											$query2 = mysql_query($count);

											while ($linha = mysql_fetch_array($query2)){
													echo $linha['total'];		
											}

Share this post


Link to post
Share on other sites

Faz um INNER JOIN ... acho que é o melhor no que tu quer fazer ..

 

é verdade, acabei de me fazer essa mesma pergunta.. :S

 

hahaha,

 

eu já tentei fazer isso, e coloquei essa consulta:

 

$count = "SELECT count(*) as total 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 nome_predio";

 

se eu uso ela, dai ela só me retorna a soma dos dos apartamentos.. ai como quero saber o nome do apartamento, telefone e outros, já não aparece nada...

 

pq será?

Share this post


Link to post
Share on other sites

Por que no select tu nao manda busca nada ... SELECT apt,condominio,salas, ....

 

ve se nao é isso cara ?

 

 

Então Amigo, tentei aqui nao deu certo nao.. acho que ainda estou pecando em um erro besta.

 

a minha consulta para trazer os dados dos apartamentos e condominios é essa:

 

$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";

 

e a consulta feita para trazer a quantidade de apartamentos em cada condominio é essa:

 

 $count = "SELECT count(*) as total 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 nome_predio"; 

 

eu tenho que conseguir fazer a mesma funcao da consulta de baixo, junto com a consulta de cima, mais sem perder dados entende?

 

Abrass

Share this post


Link to post
Share on other sites

$pesquisar = "SELECT tccc.*,tcca.* FROM tb_cad_cli_condominio tccc INNER JOIN tb_cad_cli_apartamento tcca ON tccc.pk_cli_condominio = tcca.pk_cli_condominio_id ORDER BY tccc.nome_predio";

 

ve se muda algo

Share this post


Link to post
Share on other sites

$pesquisar = "SELECT tccc.*,tcca.* FROM tb_cad_cli_condominio tccc INNER JOIN tb_cad_cli_apartamento tcca ON tccc.pk_cli_condominio = tcca.pk_cli_condominio_id ORDER BY tccc.nome_predio";

 

ve se muda algo

 

Gremio10 , Muito obrigado pelo ajuda.

 

neste exemplo que tu me mandou, ele me retornou normalmente os dados do condominio e do apartamento, sem erro como antes tava acontecendo.

 

Porém, nao consegui fazer a contagem de apartamentos em condominio. :S

 

tentei dar um print no tccc - tcca e nada.

 

lembrando que meu array $dados já está pronto, pois ele imprimi as outras informações normalmente...

 

mais alguma ideia??

 

Estou tentando aqui e pesquisando mais, mas ta dificil.. hehehe

 

valew aii..

 

Abraço.

Share this post


Link to post
Share on other sites

o melhor que tu poderia fazer é puxar todos os campos individualmente, para que nao tenha duplicidade de nomes ..

 

digamos que na tbm tccc tem ...

id | nome | data | condominio

e na tcca tem ....

id | nome | apt

 

temos dois id e nome ...

 

faz assim.

tccc.nome AS nome,

tcca.nome AS nome_a,

.

.

.

Share this post


Link to post
Share on other sites

Não tem como trazer os dados em duplicidade, pq os nomes dos campos das tabelas estão todos diferentes.

 

o que preciso, é fazer o inner join entre elas e tbm contar quantos apartamentos tem em cada condominio usando o COUNT e GROUP BY.

 

só que nao consigo colocar esses dois tipos de consulta em uma só, e se coloco separadamente, o while sai errado...

 

abrass

Share this post


Link to post
Share on other sites

Gremio10 , pelo que eu testei aqui não deu certo essa forma.. a não ser que esteja errando aqui..

 

e Matias Rezende, vou dar uma lida nisso..

 

Se alguem tiver outra sugestão ai, por favor poste aii..

 

Obrigado pessoal.

 

Matias,

 

lendo o que você passou, vi que a função funciona com GROUP BY, porém preciso do GROUP BY para somar as funcções e ORDER BY para me mostrar o relacionamento..

 

preciso desses dois caras, juntos na mesma consulta..

 

Alguma ideia?

 

Abraços

 

Pessoal, alguem sabe fazer uma query ultilizando GROUP BY e ORDER BY na mesma query?

 

é disso que preciso

Share this post


Link to post
Share on other sites

O GROUP BY serve como ordenação também. Como está a query neste momento?

 

(Como a dúvida é basicamente na montagem da query, vou mover para o fórum de MySQL).

 

Carlos Eduardo

Share this post


Link to post
Share on other sites

Bom dia, Matias obrigado pela resposta.

 

Eu tenho duas query's que funcionam:

 

essa:

 

$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"; 

 

Por causa do inner join, consigo mostrar o nome dos apartamentos que fazem parte do condominio.

 

 

e tenho essa:

 

SELECT count(*) as total 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 nome_predio;

que me mostra a contagem de quantos apartamentos tem em cada condominio.

 

Como estou motando uma tabela dentro do while, preciso que uma só consulta faça a função das duas.

 

pois ai, consigo pegas o nome dos apartamentos do condominio, e numero de apartamentos que cada condominio tem.. entendeu?

 

pq se eu montar outro while dentro do while que já tenho, ele vai me trazer os numeros todos juntos em uma só célula da tabela.

 

Alguem pode me ajudar?

 

Abraçoss...

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.