Nelma Postado Janeiro 25, 2008 Denunciar Share Postado Janeiro 25, 2008 Boa tardeEstou montando um relatório da seguinte forma:Relacionar as unidades da PM em cada estado, sendo que os estados serão agrupados por região.O selec esta da seguinte forma:$query = mysql_query("SELECT policia_militar.descricao_pm, policia_militar.url_pm,estado.cod_estado, regiao.cod_regiao, regiao.regiao FROM regiao, estado, policia_militar WHERE regiao.cod_regiao = estado.cod_regiao AND estado.cod_estado = policia_militar.cod_estado GROUP BY regiao.cod_regiao, estado.cod_estado"); while($result = mysql_fetch_row($query)) { print "<tr>"; print "<td height=\"20\" colspan=\"2\" align=\"center\" valign=\"middle\" class=\"tit_news\">$result[4]</td>"; print "</tr>"; print "<tr>"; print "<td width=\"300\" height=\"25\" align=\"left\" valign=\"middle\" class=\"fonte\" bgcolor=\"#F0F0F0\">$result[0]</td>"; print "<td width=\"300\" align=\"left\" valign=\"middle\" bgcolor=\"#F0F0F0\"><a href=\"$result[1]\" target=\"self\" class=\"a_news\">$result[1]</a></td>"; print "</tr>"; }O problema é q a região tb está aparencendo mais de uma vez (para cada estado). E eu gostaria que a região aparecesse apenas uma vez.Valeu pela atenção Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Janeiro 25, 2008 Denunciar Share Postado Janeiro 25, 2008 O problema é q a região tb está aparencendo mais de uma vez (para cada estado). E eu gostaria que a região aparecesse apenas uma vez.Isto ocorre porque o group retorna apenas uma linha de cada agrupamento. Se em algum momento a região continua a mesma, mas o estado muda, haverá mais que uma linha com a mesma região, mas apenas um estado. A menos, é claro que os outros campos para este mesmo estado também possam variar - daí o processo se repete.fiquei curioso quanto ao seu SELECT ter este aspecto:SELECT policia_militar.descricao_pm, policia_militar.url_pm,estado.cod_estado, regiao.cod_regiao, regiao.regiao FROM regiao, estado, policia_militar WHERE regiao.cod_regiao = estado.cod_regiao AND estado.cod_estado = policia_militar.cod_estado GROUP BY regiao.cod_regiao, estado.cod_estadoe não acusar erro. Até onde sei, a regra básica para GROUP BY é que: todas as colunas no SELECT que não sejam funções de agregação (SUM, MAX, MIN,...) devem ser repetidas na cláusula GROUP BY.Abraços Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Janeiro 26, 2008 Denunciar Share Postado Janeiro 26, 2008 fiquei curioso quanto ao seu SELECT ter este aspecto:SELECT policia_militar.descricao_pm, policia_militar.url_pm,estado.cod_estado, regiao.cod_regiao, regiao.regiao FROM regiao, estado, policia_militar WHERE regiao.cod_regiao = estado.cod_regiao AND estado.cod_estado = policia_militar.cod_estado GROUP BY regiao.cod_regiao, estado.cod_estadoe não acusar erro. Até onde sei, a regra básica para GROUP BY é que: todas as colunas no SELECT que não sejam funções de agregação (SUM, MAX, MIN,...) devem ser repetidas na cláusula GROUP BY.AbraçosOi, Micheus!O erro ocasionado aí não aparece para o usuário, mas traduz-se em perda de performance, pois o otimizador de consulta do MySQ usará o GROUP BY para fazer as vezes do ORDER BY. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Nelma Postado Janeiro 26, 2008 Autor Denunciar Share Postado Janeiro 26, 2008 Bom diaComo eu posso resolver esse problema?Agradeço pelas explicações... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Nelma Postado Janeiro 26, 2008 Autor Denunciar Share Postado Janeiro 26, 2008 Bom diaComo eu posso resolver esse problema?Eu achei q se separasse as tabelas (policia_militar, estado e regiao), fosse o correto, para não duplicar a regiao. Sendo q há vários estados para uma certa região.Agradeço pelas explicações... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Janeiro 28, 2008 Denunciar Share Postado Janeiro 28, 2008 Bom diaComo eu posso resolver esse problema?Eu achei q se separasse as tabelas (policia_militar, estado e regiao), fosse o correto, para não duplicar a regiao. Sendo q há vários estados para uma certa região.Agradeço pelas explicações...Oi, Nelma!O select correto está descrito abaixo, porém vai continuar retornando, em várias linhas, a mesma região para o mesmo estado. O controle, para que apareça somente uma vez, você que vai ter que fazer via programação. O SQL retorna sempre uma tabela (em memória) e neste tipo de relacionamento não há outra forma de resolver.Se desejar, por não saber como fazer, posso mover este post para a área de PHP (que acho ser a linguagem que você está usando). Lá eles poderão auxiliá-la melhor.SELECT DISTINCT policia_militar.descricao_pm, policia_militar.url_pm, estado.cod_estado, regiao.cod_regiao, regiao.regiao FROM regiao, estado, policia_militar WHERE regiao.cod_regiao = estado.cod_regiao AND estado.cod_estado = policia_militar.cod_estado ORDER BY regiao.cod_regiao, estado.cod_estado Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Nelma Postado Janeiro 28, 2008 Autor Denunciar Share Postado Janeiro 28, 2008 Olá Denis!Obrigada pela ajuda.Se você puder mover esse post para lá, eu agradeço.Aliás eu fiz a pergunta lá, mas foi movido para cá.Obrigada Denis Courcy Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Janeiro 29, 2008 Denunciar Share Postado Janeiro 29, 2008 Olá Denis!Obrigada pela ajuda.Se você puder mover esse post para lá, eu agradeço.Aliás eu fiz a pergunta lá, mas foi movido para cá.Obrigada Denis CourcyPrezados colegas do PHP, por favor ensinem como produzir um relatório master detail, à nossa colega, com base no select corrigido e mencionado acima.Grato, de antemão Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Nelma
Boa tarde
Estou montando um relatório da seguinte forma:
Relacionar as unidades da PM em cada estado, sendo que os estados serão agrupados por região.
O selec esta da seguinte forma:
O problema é q a região tb está aparencendo mais de uma vez (para cada estado). E eu gostaria que a região aparecesse apenas uma vez.
Valeu pela atenção
Link para o comentário
Compartilhar em outros sites
7 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.