Banco de Dados - MySQL

mySQL: paginação de registros

Para melhor explicar como paginar registros, ainda uma dúvida para muitas pessoas, aí vai um artigo...

por Newton Pasqualini



Olá,

Para melhor explicar como paginar registros, ainda uma dúvida para muitas pessoas, aí vai um artigo.

Gostaria de abordar algumas questões iniciais.

A condição "LIMIT inicio,termino" do MySQL, funciona da seguinte maneira:

SELECT * FROM tabela LIMIT 0,5

Acima o MySQL vai capturar os registros da linha 0 e vai avansar seu cursor 5 linhas, o que resultará na captura das linhas 0, 1, 2, 3 e 4.

SELECT * FROM tabela LIMIT 5,5

Acima o MySQL vai capturar os registros da linha 5 e vai avansar seu cursor 5 linhas, o que resultará na captura das linhas 5, 6, 7, 8 e 9.

Entendendo:

"LIMIT inicio,termino", na variável "INICIO" eu só preciso informar o ponto de partida, e na variável "TERMINO" eu só preciso informar o número de linhas que quero avançar a partir de "INICIO".

Agora vamos começar:

1º - Precisamos informar quantas linhas/registros do banco queremos mostrar, sendo assim;

<?$
pag_views = 10;
?>

2º - Agora vamos a um pequeno processo para evitar a página 0, isso é para que visualmente não fique confusa uma interpretação do número da página:

<?
If (!$pagina) {
$pagina = 1;
} else {
$pagina = $pagina;
}
?>

3º - Vamos calcular o valor da variável $inicio, essa variável é quem vai dizer onde o MySQL vai começar a capturar linhas;

<?
$mat = $pagina -1; //ASSIM INICIAREMOS DA LINHA ZERO DO BANCO
$inicio = $mat * $pág_views; 
?>

Entendendo: Esse calculo é feito em 2 partes.
Vamos dizer que você está na 1ª página, sendo assim, $pagina = 1;
Para calcular $início devemos fazer o primeiro calculo,
$mat = $pagina -1
$mat = 1 -1
$mat = 0
Sendo assim,
$inicio = $mat * $pág_views
$inicio = 0 * 10
$inicio = 0

4º - Seleção de dados

<?
$sql = "SELECT * FROM tabela";
$query = mysql_query($sql); 
?>

5º - Limitando a seleção

<?
$limita = "$sql LIMIT $inicio,$pág_views";
$executa = mysql_query($limita); 
?>

Aceitando o exemplo acima do calculo da variável $inicio, começaremos da linha 0 e vamos avançar o cursor até $pag_views depois de $inicio.
Resultará nas linhas 0, 1, 2, 3, 4, 5, 6, 7, 8 e 9.

6º - Obtendo o número de linhas afetadas pela consulta, isso será útil para calcularmos quantas páginas terão esta consulta.

<?
$linhas = mysql_num_rows($query);
?>

Notem que executei $query, que seleciona todos os registros desta condição.

7º - Calculando o total de páginas

<?
$paginas = $linhas / $pág_views;
?>

Entendendo:
Supondo que $query resultou em 7.570
$paginas = $linhas / $pág_views
$paginas = 7570 / 10
$paginas = 757
Portanto teremos 757 páginas

8º - Criando os valores para o botão de voltar e para o botão de próxima página

<?
$volta = $pagina -1;
$próxima = $pagina +1; 
?>

9º - Mostrando o resultado limitado

<?
while ($dado = mysql_fetch_array($executa)) {
echo $dado[nome_do_campo];
}
?>

10º - Exibindo o link para voltar uma página

<?
If ($volta>0) echo "<a href=?pagina=$volta>Volta</a>";
?>

Entendendo:
Vamos dizer que estamos na página 1, portanto $volta = 0, se volta for maior que 0, mostra o botão VOLTAR

11º - Exibindo o botão para cada uma das páginas

<?
For ($i = 0; $i 
12º - Exibindo o botão para avançar uma página se ela existir.
<? 
If ($pagina

Quem estiver com mais dúvidas acesse meu site e cliquem no suporte on-line, terei o maior prazer em explicar mais... SoftwebSite.

Um grande abraço

Newton Pasqualini

Newton Pasqualini - Programador sênior em uma agência de propaganda, desenvolvedor/defensor de softwware livre e instrutor de PHP aos finais de semana.