mySQL: paginação de registros

Novo aqui no site? Talvez gostaria de assinar o
RSS feed do site?

Publicado em: 02/08/2007
Área: MySQL
Visualizações: 2.537
Comentário(s): 2

imprimir envie por e-mail compartilhe
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 <= $paginas; $i++){ //REPETE ATÉ QUE SE ACABEM AS PAGINAS
$pag =  $i +1; //EVITA A PÁGINA
ZERO echo "<a href=?pagina=$pag>$pág</a>"; //MOSTRA O BOTÃO PARA A PÁGINA
}
?>


12º - Exibindo o botão para avançar uma página se ela existir.
<?
If ($pagina<$paginas) echo "<a href=?pagina=$proxima>Proxima</a>";
?>


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

Preencha o formulário para comentar:
Nome:*

E-mail:* (não será exibido)

Site: (http://)

Comentário:*

Deseja receber os comentários no e-mail?

Anti-spam: (nova imagem)





Wilson

   - Publicado em: 25/04/2008 - 12:07

tem como paginar conforme esse select $sql = 'SELECT p.*, f.*, t.*, u.*' . ' FROM phpbb_posts p' . ' LEFT JOIN phpbb_topics t ON (p.topic_id = t.topic_id)' . ' LEFT JOIN phpbb_forums f ON (p.forum_id = f.forum_id)' . ' LEFT JOIN phpbb_users u ON (p.poster_id = u.user_id)' . ' order by post_id desc LIMIT 5 '; usar mysql_fetch_array ?? agradeço a ajuda

 

Gustavom

   - Publicado em: 10/07/2008 - 00:42

Muito bom!!!!! Obrigado!

 

Autor da matéria
Redação Oficina da Net
A Redação do Oficina da Net é composta por todos os integrantes da equipe do portal. Estamos abertos a indicações de matérias, entre em contato conosco solicita.

Todas as matérias de Redação Oficina da Net

Publicidade
Seguir o Oficina da Net
RSS

RSS

RSS
Top matérias do mês
Matérias relacionadas
Tags

© 2005 - 2009 - Oficina da Net - v 4.0 - É proibida a reprodução parcial ou completa do conteúdo deste site sem autorização por escrito. Resolução adequada: 1024x768px.