wagtel Postado Janeiro 22, 2014 Denunciar Share Postado Janeiro 22, 2014 Olá pessoal Estou tentando criar um recordset para contar os registros repetidos no campo id_bairro da tabela cadastros Ou seja, quantos endereços existem em cada bairro SELECT DISTINCT id_bairro FROM cadastro GROUP BY id_bairro_tax HAVING id_bairro_tax > 1 Mas este recordset apenas me dá apenas a quantidade de bairros únicos Veja o exemplo em http://www.wagtel.com/projeto/bairros_2.php?Estado=26&Cidade=9668 Fiz uma busca no Google e encontrei o código mais ou menos assim: SELECT COUNT ( id_bairro_tax) FROM cadastro GROUP BY id_bairro_tax HAVING COUNT ( id_bairro_tax) > 1 Mas a página dá o erro: FUNCTION tacapi_taxis.COUNT does not exist Alguém pode me dar uma luz quanto à este problema? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Markus Magnus Postado Janeiro 23, 2014 Denunciar Share Postado Janeiro 23, 2014 O seu primeiro exemplo está quase correto, só falta um detalhe no HAVING, que deveria ser assim: SELECT DISTINCT id_bairro FROM cadastro GROUP BY id_bairro_tax HAVING COUNT(id_bairro_tax) > 1 Da forma como você fez "HAVING id_bairro_tax > 1" ele vai aceitar todos os registros que tenham o VALOR do campo id_bairro_tax maior que 1 e não a CONTAGEM. E no segundo exemplo o problema é o espaço entre "COUNT" e o "(". Espero ter ajudado. Tudo de bom. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 wagtel Postado Janeiro 25, 2014 Autor Denunciar Share Postado Janeiro 25, 2014 (editado) Olá Markus: De fato, fiz as correções no código e até deu certo, ficou assim: SELECT COUNT( id_bairro_tax) FROM taxis_cadastro GROUP BY id_bairro_tax HAVING COUNT(id_bairro_tax) > 0 Quando texto ele no Dreamweaver ele me dá exatamente a quantidade de endereços que cada bairro tem. Mas na página bairros_2.php, ele me dá apenas o total de bairros repetidos o código que uso na página é: <?php echo $totalRows_Contador ?> Tentei um outro geito que até funciona, com <Iframe> onde é enviado o id_bairro_tax de cada bairro, e ele devolve a quantidade exata. Mas fica ruim por que o width do <iframe> não é flexível Veja os exemplos na página: http://www.wagtel.com/projeto/bairros_2.php?Estado=26&Cidade=9668 Como faço para conseguir este resultado sem ter que usar <iframe> ? Editado Janeiro 25, 2014 por wagtel Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Markus Magnus Postado Janeiro 26, 2014 Denunciar Share Postado Janeiro 26, 2014 (editado) Entendi. Pra ter certeza eu precisaria ver o código completo da página bairros_2.php e talvez da página bairros_2_iframe_intro.php, para comparar. Mas acredito que na página bairros_2_iframe_intro.php você está fazendo da maneira correta pegando o valor retornado pelo sql, algo do tipo. <?php $resultado = mysql_query('SELECT COUNT(id_bairro_tax) FROM taxis_cadastro WHERE id_bairro_tax = 48595 GROUP BY id_bairro_tax HAVING COUNT(id_bairro_tax) > 0'); $totalRows_Contador = mysql_fetch_row($resultado); echo $totalRows_Contador[0]; ?> Já na página bairros_2.php das duas uma ou você está contanto a quantidade de registros retornados pela consulta, ou você está pegando o valor da primeira linha e escrevendo ele novamente para todos os itens, tipo: <?php $bairros = mysql_query(/*SELECT DOS BAIRROS*/); $resultado = mysql_query('SELECT COUNT(id_bairro_tax) FROM taxis_cadastro GROUP BY id_bairro_tax HAVING COUNT(id_bairro_tax) > 0'); $totalRows_Contador = mysql_fetch_row($resultado); while ($bairro = mysql_fetch_assoc($bairros)) { echo '<a href="...">'.$bairro['nome'].' - '.$totalRows_Contador[0].'</a>'; } ?> OU <?php $bairros = mysql_query(/*SELECT DOS BAIRROS*/); $resultado = mysql_query('SELECT COUNT(id_bairro_tax) FROM taxis_cadastro GROUP BY id_bairro_tax HAVING COUNT(id_bairro_tax) > 0'); while ($row = mysql_fetch_row($resultado) { $rows[] = $row; } $totalRows_Contador = count($rows); while ($bairro = mysql_fetch_assoc($bairros)) { echo '<a href="...">'.$bairro['nome'].' - '.$totalRows_Contador.'</a>'; } ?> OU <?php $bairros = mysql_query(/*SELECT DOS BAIRROS*/); $resultado = mysql_query('SELECT COUNT(id_bairro_tax) FROM taxis_cadastro GROUP BY id_bairro_tax HAVING COUNT(id_bairro_tax) > 0'); $totalRows_Contador = mysql_num_rows($resultado); while ($bairro = mysql_fetch_assoc($bairros)) { echo '<a href="...">'.$bairro['nome'].' - '.$totalRows_Contador.'</a>'; } ?> Quando o certo seria algo do tipo: <?php $bairros = mysql_query(/*SELECT DOS BAIRROS*/); while ($bairro = mysql_fetch_assoc($bairros)) { $resultado = mysql_query('SELECT COUNT(*) FROM taxis_cadastro WHERE id_bairro_tax = '.$bairros['id']); $totalRows_Contador = mysql_fetch_row($resultado); echo '<a href="...">'.$bairro['nome'].' - '.$totalRows_Contador[0].'</a>'; } ?> Repare que a consulta que conta a quantidade de endereços de cada bairro está mais curta, porque a clausula HAVING só serve para filtrar os registros retornados, como se fosse uma segunda clausula WHERE, exemplo: Você uma tabela de cadastro de produtos e alguns estagiario duplicou parte dos produtos você precisa de uma lista dos produtos duplicados logo você precisa de uma consulta assim: SELECT nome FROM produtos GROUP BY nome HAVING count(*) > 1 Onde você retorna o nome do produto agrupando por nomes iguais, mas FILTRANDO com HAVING e exibindo apenas os registros com mais de uma repetição No seu caso: SELECT COUNT(id_bairro_tax) FROM taxis_cadastro GROUP BY id_bairro_tax HAVING COUNT(id_bairro_tax) > 0 Você não está filtrando nada com o HAVING então ele pode ser excluído: SELECT COUNT(id_bairro_tax) FROM taxis_cadastro GROUP BY id_bairro_tax E quando você usa o COUNT() automaticamente o sql faz um GROUP BY então o GROUP BY é desnecessário SELECT COUNT(id_bairro_tax) FROM taxis_cadastro Editado Janeiro 26, 2014 por Markus Magnus Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 wagtel Postado Janeiro 26, 2014 Autor Denunciar Share Postado Janeiro 26, 2014 (editado) Agora entendi minha dificuldade: Eu criei dois recordset: SELECT DISTINCT - Este me retorna todos os bairros (sem repetir) e SELECT COUNT - Este me retorna a quantidade de bairros (por grupo) Ex: de 1 até infinito Quando uso o loper (repetir a região) para apresentar as listagens de bairros (na página) estou usando o SELECT DISTINCT Daí o SELECT COUNT apresenta apenas o valor da contagem do primeiro grupo, no caso (4) Pensei então em unir estes dois recordsets: SELECT id_bairro_tax, bairro_tax, COUNT( * ) AS count FROM `taxis_cadastro` GROUP BY id_bairro_tax HAVING COUNT(id_bairro_tax) > 0 Desta forma eu consegui unir DISTINCT e COUNT recebenddo também os parâmetros: <?php echo $row_TaxisResult['id_bairro_tax']; ?>(como campo) <?php echo $row_TaxisResult['bairro_tax']; ?>(como campo) <?php echo $row_TaxisResult['count']; ?> (como o contador de registros repetidos) Mas o problema ainda estava no filtro para id_estado_tax e id_cidade_tax Penei um pouco para encontrar o lugar certo para o WHERE, mas encontrei. SELECT id_bairro_tax, bairro_tax, COUNT( * ) AS count FROM `taxis_cadastro` WHERE id_estado_tax = colname AND id_cidade_tax = var GROUP BY id_bairro_tax HAVING COUNT(id_bairro_tax) > 0 ORDER BY bairro_tax ASC Pronto, consegui exatamente o que precisava. Agradeço muito à todos e ao Markus Magnus pela força. Editado Janeiro 26, 2014 por wagtel Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
wagtel
Olá pessoal
Estou tentando criar um recordset para contar os registros repetidos no campo id_bairro da tabela cadastros
Ou seja, quantos endereços existem em cada bairro
Mas este recordset apenas me dá apenas a quantidade de bairros únicos
Veja o exemplo em http://www.wagtel.com/projeto/bairros_2.php?Estado=26&Cidade=9668
Fiz uma busca no Google e encontrei o código mais ou menos assim:
Mas a página dá o erro: FUNCTION tacapi_taxis.COUNT does not exist
Alguém pode me dar uma luz quanto à este problema?
Link para o comentário
Compartilhar em outros sites
4 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.