Gerar colunas na exibição de registros PHP/MySQL

Olá pessoal. Desculpem a demora para postar, mas é que não tenho tido tempo para fazer novos artigos. Logo farei a continuação daquela Primeira Video-aula, mas por enquanto vamos ficar nesse artigo.

Bom, em alguns casos precisamos exibir os registros do banco de dados em colunas para economia de espaço, ou mesmo para uma melhor aparência. Se você se pergunta, “como se faz isso?”, está no artigo certo.

Veja o resultado final, clicando aqui.

1. Banco de dados

Vamos utilizar como um simples exemplo, uma tabela de produtos. Onde há os campos: cod, nome e valor.

CREATE TABLE IF NOT EXISTS `produtos` (
  `cod` int(11) NOT NULL AUTO_INCREMENT,
  `nome` varchar(50) NOT NULL,
  `valor` double NOT NULL,
  PRIMARY KEY (`cod`)
) ENGINE
=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

INSERT INTO `produtos` (`cod`, `nome`, `valor`) VALUES
(1, 'Produto 1', 1.99),
(2, 'Produto 2', 5.19),
(3, 'Produto 3', 8.25),
(4, 'Produto 4', 12.99);

Criamos nossa tabela produtos e inserimos inicialmente 4 produtos para utilizarmos como exemplo.

2. Função GeraColunas()

A função GeraColunas() será responsável pela criação das colunas.

<?php
function GeraColunas($pNumColunas, $pQuery) {
	// Executa a instrução SQL
	$resultado = mysql_query($pQuery);

	// Inicia a tabela
	echo ("<table width='100%' border='1' style='border-collapse:collapse; border-color: #999'>\n");

	// Loops para gerar as colunas
	for($i = 0; $i <= mysql_num_rows($resultado); ++$i) {
	for ($intCont = 0; $intCont < $pNumColunas; $intCont++) {
		$linha = mysql_fetch_array($resultado);
		if ($i > $linha) {
			if ( $intCont < $pNumColunas-1) echo "</tr>\n";
				break;
			}

		// Coloca cada valor do banco de dados em uma variável
		$codigo = $linha[0];
		$produto = $linha[1];
		$valor = $linha[2];

			if ($intCont == 0) {
				echo "<tr>\n";
			}

			// Aqui vai o conteudo, ou seja, exibimos o nome do produto e seu respectivo valor
			echo "<td align='center' height='50'><b>". $produto ."</b> <br /> R$ ". $valor ."</td>\n";

			if ($intCont == $pNumColunas-1 ) {
				echo "</tr>\n";
			} else {
				$i++;
			}
		}
	}
	// Fim da tabela
	echo ('</table>');
}
?>

Agora já temos nossa função, basta simplesmente chamá-la:

<?php
// Comando SQL
$sql = "SELECT * FROM produtos ORDER BY cod ASC";

/*
Chamamos a função GeraColunas(), o primeiro parametro é o
número de colunas e o segundo o comando SQL
*/
GeraColunas(2, $sql);
?>

Pronto, já exibimos nossos produtos em duas colunas. Agora você pode ajustar a função de acordo com a sua necessidade, como por exemplo, alterar a aparência da tabela, ou até mesmo criando uma nova tabela dentro do conteudo.

Espero que o artigo tenha sido útil a você, até mais!

Referência:
http://www.revistaphp.com.br/artigo.php?id=9