-rafael- 1 Denunciar post Postado Agosto 2, 2010 ola a todos, tenho a seguinte consulta: SELECT area, Count(*) AS Total FROM campo WHERE `setor`=1 GROUP BY area ai tenho o seguinte resultado: area -> total 1 -> 12 2 -> 18 3 -> 30 4 -> 28 5 -> 28 6 -> 29 7 -> 31 8 -> 24 serão sempre 8 areas, com valores variaveis. ate ai tudo bem. o problema é que eventualmente pode nao haver nada em determinada area, por exemplo, na area 3, ai o retorno fica assim: area -> total 1 -> 12 2 -> 18 4 -> 28 5 -> 28 6 -> 29 7 -> 31 8 -> 24 mas gostaria que fosse assim: area -> total 1 -> 12 2 -> 18 3 -> 0 4 -> 28 5 -> 28 6 -> 29 7 -> 31 8 -> 24 como faço para deixar o resultado assim? Banco mysql 5.1, php5, apache2. espero ter sido bem claro, qualquer duvida me avisem q posto. obrigado Compartilhar este post Link para o post Compartilhar em outros sites
André D. Molin 15 Denunciar post Postado Agosto 2, 2010 Pelo MySQL creio que não tenha nada a fazer, desconheço de algum método que chegue a esse resultado. Pode até existir mas eu não sei. Mas já tentou fazer isso com o PHP? Compartilhar este post Link para o post Compartilhar em outros sites
EuToComProblema! 1 Denunciar post Postado Agosto 2, 2010 concordo com o André, até dá para fazer por SQL, mas além dele ficar meio feio talvez ainda fique pessado... pelo php você poderia jogar o resultado em um array. depois onde precisará desses valores podes fazer algo tipo: for(.....) { if(!isset(array[$i])) //isset ou empty caso nao funcione corretamente array[$i] = 0 } isso assumindo que as chaves do array seriam sua primeira coluna 1 à 8... Compartilhar este post Link para o post Compartilhar em outros sites
-rafael- 1 Denunciar post Postado Agosto 2, 2010 ok obrigado pela ajuda outra forma q pensei seria fazer uma consulta para cada uma das areas - 1 a 8 - mas tambem tenho 8 setores, ou seja 64 consultas diferentes, e tem mais 3 padroes, dando um total de 192 consultas diferentes. ai acho q vai ferrar tudo... acho q com o loop for daria certo, você teria algum exemplo de como usar? obrigado pela ajuda!!! Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Agosto 2, 2010 <?php $mysql = mysql_connect('localhost','root','') or die(mysql_error()); $db = mysql_select_db('db',$mysql) or die(mysql_error()); $sql = <<<SQL SELECT area, Count(*) AS Total FROM campo WHERE `setor`=1 GROUP BY area SQL; $rs = mysql_query($sql) or die(mysql_error()); while(false !== ($row = mysql_fetc_assoc($rs))) $setores[$row['area']] = $row['Total']; for($i = 1; $i < 9; $i++) if(empty($setores[$i])) $setores[$i] = 0; var_dump($setores); Compartilhar este post Link para o post Compartilhar em outros sites
Victor Cometti 8 Denunciar post Postado Agosto 2, 2010 quando n retorna nada é porque n tem registro (óbvio), vai ter q ser em php msm tipo //considerando que as áreas sempre vão de 1 a 8 e você pesquisa 1 setor por vez $cont = 1; while($linha = mysql_fetch_assoc($sql) or $cont <= 8){ if ( $linha['area'] != $cont ) echo "<tr><td>{$cont}</td><td>0</td></tr>"; else echo "<tr><td>{$linha['area']}</td><td>{$linha['total']}</td></tr>"; $cont++; } Compartilhar este post Link para o post Compartilhar em outros sites
-rafael- 1 Denunciar post Postado Agosto 2, 2010 Primeiro, agradeço pela ajuda!!! Evandro, talvez pela minha falta de conhecimento, nao dei conta de usar seu script... mas vou continuar tentando! Victor Cometti, tem um problema que nao consegui solucionar de jeito nenhum: se uma linha for 0 todos os outros resultado abaixo serão 0 tbm! veja: 0 - 190 1 - 12 2 - 4 3 - 0 // aqui esta correto 4 - 0 // aqui era para ser 3 5 - 0 // aqui era para ser 1 agradeço a ajuda! Compartilhar este post Link para o post Compartilhar em outros sites
André D. Molin 15 Denunciar post Postado Agosto 2, 2010 Há um erro de lógica no código do Victor. Ele funciona normalmente até a primeira vez que a expressão lógica do if retorna true, depois disso, $linha['area'] SEMPRE terá um valor maior que $cont, e por isso o if continua avaliando como true quando era para avaliar como false. Uma possível solução é a seguinte (não testei, pode não funcionar rs): while( ( $linha = mysql_fetch_assoc( $sql ) ) !== false || ( $cont = 1 ) <= 8 ) { if ( $linha['area'] != $cont ) { printf( '<tr><td>%d</td><td>0</td></tr>', $cont++ ); printf( '<tr><td>%d</td><td>%d</td></tr>', $linha[ 'area' ], $linha[ 'total' ] ); } else { printf( '<tr><td>%d</td><td>%d</td></tr>', $linha[ 'area' ], $linha[ 'total' ] ); } $cont++; } Compartilhar este post Link para o post Compartilhar em outros sites
Victor Cometti 8 Denunciar post Postado Agosto 2, 2010 é tinha um erro msm!! a sua correção funciona!! corrigindo while(($linha = mysql_fetch_assoc($sql)) or $cont <= 8){ if ( $linha['numero'] != $cont ){ echo "<tr><td>{$cont}</td><td>0</td></tr>"; echo "<tr><td>{$linha['area']}</td><td>{$linha['total']}</td></tr>"; $cont++; }else echo "<tr><td>{$linha['area']}</td><td>{$linha['total']}</td></tr>"; $cont++; } Compartilhar este post Link para o post Compartilhar em outros sites
-rafael- 1 Denunciar post Postado Agosto 2, 2010 ola, obrigado pelas ajudas! mas, descobri um pequeno detalhe nesse script: se dois resultados seguidos forem 0, ele faz uma bagunça, vejam: 1 - 12 2 - 4 3 - 0 6 - 3 5 - 0 o esperado era: code] 1 - 12 2 - 4 3 - 0 4 - 0 5 - 0 6 - 3 [/code] o que pode ser? Compartilhar este post Link para o post Compartilhar em outros sites
Victor Cometti 8 Denunciar post Postado Agosto 2, 2010 faz uns testes ae, se num intender eh soh falar!! $cont = 1; while(($linha = mysql_fetch_assoc($sql)) or $cont <= 8){ while ( $linha['area'] != $cont ){ echo "<tr><td>{$cont}</td><td>0</td></tr>"; $cont++; } echo "<tr><td>{$linha['area']}</td><td>{$linha['total']}</td></tr>"; $cont++; } Compartilhar este post Link para o post Compartilhar em outros sites
-rafael- 1 Denunciar post Postado Agosto 2, 2010 ola, obrigado pela ajuda o codigo q você me passou entra em loop infinito! Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Agosto 2, 2010 exporte a tabela e poste a estrutura aqui Compartilhar este post Link para o post Compartilhar em outros sites
Victor Cometti 8 Denunciar post Postado Agosto 2, 2010 engraçado, testei aki e funcionou de qlqr forma finaliza o while quando $cont for igual a 8 while(($linha = mysql_fetch_assoc($sql)) or $cont <= 8){ while ( $linha['area'] != $cont ){ echo "<tr><td>{$cont}</td><td>0</td></tr>"; if( $cont == 8 ) break;//finalizando o loop $cont++; } echo "<tr><td>{$linha['area']}</td><td>{$linha['total']}</td></tr>"; $cont++; } Compartilhar este post Link para o post Compartilhar em outros sites
-rafael- 1 Denunciar post Postado Agosto 2, 2010 ok pessoal depois de muita luta, e com a ajuda de vocês, consegui finalizar o codigo. o resultado final segue abaixo: $cont = 1; $limit = 8; while(($linha = mysql_fetch_assoc($sql)) or $cont <= $limit){ while ( $linha['area'] != $cont ){ if( $cont > $limit ) break; echo 'area' . "$cont" . ' - ' . "0" . "<br /> <br />"; $cont++; } if( $cont > $limit ) break; // necessário, pois se a última linha for 0 ele repete a sequencia abaixo, mesmo não tendo dados echo 'area' . $linha['area'] . ' - ' . $linha['total'] . "<br /> <br />"; $cont++; } obrigado a todos!! :clap: :joia: resolvido! Compartilhar este post Link para o post Compartilhar em outros sites