Categorias

Paginação com uma única consulta ao banco de dados

Este script utiliza CSS e JavaScript para paginar resultados de uma consulta a banco de dados (no caso, MySQL) de forma que seja preciso carregar uma única vez a página e não uma vez a cada página de resultados.

Basicamente o script funciona assim:
– É executada a consulta ao banco de dados;
– É montado um DIV para cada página de resultado, sendo que o primeiro permanece visível e os demais, ocultos;
– Ao clicar no número de página, o DIV visível atualmente é ocultado e o correspondente a página desejada é exibido.

Adicionalmente coloquei um formulário para que seja pesquisada uma string MySQL diretamente.
Este exemplo utiliza o banco information_schema do phpMyAdmin (a título de exemplo). Código totalmente comentado.

Você precisa informar a string de pesquisa (pode configurar uma padrão) e o número de linhas por página (opcional, pois o padrão é 25).

		function ir(p){
			var np=parseInt(document.np.np.value);
			var obj;
			for(var i=1;i'; //monta o javascript que irá exibir/ocultar a paginação
	for($i=0;$i<$nc;$i++){ //monta um array com os campos da consulta
		$campos[$i]=mysql_field_name($q,$i);
	}
	$p=1;//seta a primeira página
	$l=1;//seta a primeira linha
	$rows=1;//seta o contador geral de linhas
	while($r=mysql_fetch_array($q)){ //pega cada linha do resultado da consulta
		if($p==1){$visibility="visible";$display="inline";}else{$visibility="hidden";$display="none";}; //se é a primeira página, exibe o div, senão oculta o div
		if($l==1){//se é a primeira linha da página, coloca o título primeiro
			$div.='
'; while(list($k,$c)=each($campos)){//monta cada coluna do título $div.=''; }// fim while do título reset($campos);//resseta os campos $div.='';//fecha a linha do título }//fim do if da primeira linha (título) $div.='';//abre a linha de dados while(list($k,$c)=each($campos)){//monta as colunas de resultado $v=$r[$c]; $div.=''; }//fecha while que monta os dados reset($campos);//resseta os campos $div.='';//fecha linha do resultado if($l==$np || $rows==$nr){//se a linha é igual ao máximo de linhas por página ou se chegou à última linha do resultado $div.='
'.$c.'
'.$v.'
';//fecha a tabela $links.='['.$p.']';//monta o link para as páginas $p++;//próxima página $l=1;//reinicia a contagem de linha }else{//senão é o máximo de linhas da página $l++;//aumenta a linha }//fecha if do número de linhas $rows++;//aumenta o contador geral de linhas }//fim while que pega cada linha do resultado $div.='
'.$links.'
'; echo $div;//escreve as páginas } ?> Paginação com troca rápida
Pesquisar
SQL:
SQL pesquisada: