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).

if(!$_POST[sql]){$sql="select * from collations";}else{$sql=$_POST[sql];}//se não tiver recebido uma sql por formulário, usa a sql padrão

function pag($sql,$np='25'){
	mysql_connect('localhost','root',''); mysql_select_db('information_schema'); //executa a conexão e seleção de banco de dados
	$q=mysql_query($sql);//executa a consulta
	$nc=mysql_num_fields($q);//número de campos afetados pelo resultado
	$nr=mysql_num_rows($q);//número de linhas do resultado
	$div=''; //monta o javascript que irá exibir/ocultar a paginação
	for($i=0;$i
'; 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: echo $sql; ?>
pag($sql);//coloque a string de consulta sql (obrigatório) e o número de páginas (opcional)?>