D2th3 3 Denunciar post Postado Agosto 27, 2010 Amigos, Esse tópico é para compartilhar um script que eu desenvolvi e me ajuda muito. Trata-se de uma listagem em 2 colunas, porém não da forma tradicional. Faço a listagem usando a TAG de lista (UL e LI) do HTML e CSS para diagramar. Quando solicito um resultado do MySQL através do PHP por ordem alfabética o mesmo retorna o resultado abaixo: A A B C C C D Se eu quero em 2 colunas fica assim: Col 1 | Col 2 A A B C C C D O Objetivo é colocar assim: Col 1 | Col 2 A C A C B D C Vamos ao PHP <?php $conn = mysql_connect("localhost", "mysql_user", "mysql_password"); mysql_select_db("mydbname", $conn); $sql = "SELECT bairro FROM tb_bairro ORDER BY bairro ASC"; $result = mysql_query($sql, $conn); $row = mysql_fetch_assoc($result); // Retorna o total de registros $total_row = mysql_num_rows($result); // Salvo o resultados em um array // Faço isso para os registros ganharem índices de 0 a x. do{ $bairro[] = $row['bairro']; }while($row = mysql_fetch_assoc($result)); mysql_free_result($result); //Aqui eu defino o número de colunas, no caso 2 colunas $r = $total_row / 2; // Existe matemática para duas situações // Se o total for par ou ímpar // Vamos saber $status = (1 & $total_row) ? 'impar' : 'par'; if(status == 'impar'){ // Cálculos para situação ímpar // Quando dividimos um número ímpar por 2 ele fica igal algo,5 // Por isso temos que arredondar e somar mais pois a primeira coluna fica com um registro a mais $coluna1 = floor($r) + 1; $coluna2 = ($total_row - $coluna1) + 1; }else{ // Se for par não existe coluna com sobras então as duas colunas tem o mesmo número de elementos $coluna1 = $r; $coluna2 = $r; } // Definir alguns parametro para o Loop // O $i é o início da contagem da primeira coluna // O $j é o início da segunda coluna // O $m é o limite do Loop $i = 0; $j = $coluna2; $m = 0; ?> CSS <style type="text/css"> *{padding: 0px; margin: 0px; list-style:none;} div{width: 500px; margin-left: auto; margin-right: auto;} div ul{width: 500px; display:block;} div ul li{width: 240px;height: 15px;padding: 5px;float: left;} </style> HTML e PHP <div> <ul> <?php // Imprimindo o resultado do{ // Limite para Coluna 1 - $i if($i < $coluna1){ echo '<li>'. $bairro[$i] .'</li>'; $i++; } // Limite para Coluna 2 - $j if($j < $total_row){ echo '<li>'. $bairro[$j] .'</li>'; $j++; } $m++; }while($m < $total_row); ?> </ul> </div> Dessa forma eu consegui colocar os resultados em duas colunas e em ordem alfabética. O SEGREDO é trançar os dados. E pode fazer N colunas desde que altere sempre a matemática acima. Experimente tirar o Float do LI em CSS Se alguém tiver algo a acrescentar, alguma forma mais simples, que tenha um consumo menor, por favor apresente e acrescente para mim e os companheiros de forum. Obrigado a todos. Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Agosto 27, 2010 hum... uma lógica mais simples acho: <style type="text/css"> *{ padding: 0px; margin: 0px; list-style:none; } .coluna { float: left; width: 240px; } </style> <?php $con = mysql_connect( 'localhost', 'root', '123' ); mysql_select_db( 'test', $con ); $sql = "SELECT bairro FROM tb_bairro"; $query = mysql_query( $sql )or die( mysql_error() ); $colunas = 2; $num = ceil( mysql_num_rows( $query )/$colunas );//quantidade de registros por coluna $li = '<ul class="coluna">'; $i = 0; while( $dados = mysql_fetch_object( $query ) ) { if( $i==$num ) { $li .= '</ul><ul class="coluna">'; $i=0; } $li .= '<li>'.$dados->bairro.'</li>'; $i++; } $li .= '</ul>'; echo $li; precisei disso uma vez... e veja que variando o $colunas, você pode dividir em qntas colunas precisar.. sem alterar nada do código, apenas essa variavel. ^_^ Compartilhar este post Link para o post Compartilhar em outros sites
D2th3 3 Denunciar post Postado Agosto 27, 2010 Legal Willian... Realmente ficou mais simples e prático. Obrigado pela orientação. Compartilhar este post Link para o post Compartilhar em outros sites
D2th3 3 Denunciar post Postado Agosto 27, 2010 Testei esse formato do William, porém o primeiro registro não apareceu, ficou um campo em branco. Por que? Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Agosto 27, 2010 não sei ^_^ pra mim apareceu. Mostre como você tentou fazer, e se o primeiro registro no teu banco, tem valor. Compartilhar este post Link para o post Compartilhar em outros sites
D2th3 3 Denunciar post Postado Agosto 28, 2010 Não ficou um <li<</li> dessa forma... vazio. Resolvi. Troquei while($dados = mysql_fetch_object( $query )){} por while($dados = mysql_fetch_assoc($query)){} E dentro do Loop $dados['bairro']; Valeu. Compartilhar este post Link para o post Compartilhar em outros sites
D2th3 3 Denunciar post Postado Agosto 28, 2010 Um fato interessante ao aplicar esse script na programação com dados variados. Se eu trabalhar com 3 colunas quando a base contiver 4 registro ele fica assim: Col1 | Col2 | Col3 A | B A | B Onde ficaria mais correto se ficasse assim: Col1 | Col2 | Col3 A | A | B B Ainda não resolvi isso. Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites