Paginação com PostgreSQL no PHP

Paginação com PostgreSQLOlá pessoal, seguindo com a série de artigos sobre paginação de dados com PHP + PDO, mostrarei a seguir  como montar uma paginação com PostgreSQL 9.3. O PostgreSQL é um banco extremamente robusto e muito utilizado em aplicações de missão crítica, comporta com tranquilidade grandes volumes de dados e como o MySQL também possui comandos nativos para auxiliar na paginação de dados. 
  
Para montar a paginação com PostgreSQL podemos utilizar as clausulas LIMIT e OFFSET  no final da nossa instrução SQL, essas 2 clausulas funcionam de maneira semelhante ao LIMIT do MySQL, diferindo apenas na ordem dos parâmetros.

Se utilizarmos a clausula LIMIT o valor informado irá retornar apenas a quantidade de registros de acordo com valor passado, no exemplo abaixo somente os primeiros “10” registros:

Agora se utilizarmos LIMIT em conjunto com OFFSET o valor informado indica quantos registros serão “pulados” a partir da linha indicada no OFFSET. No exemplo abaixo a consulta vai retornar registros começando pela linha “0” (não tem relação com campos ID) com os próximos “10” registros. Serão retornados 10 registros no total,  mas conseguimos informar a partir de onde será iniciado essa contagem, é por aí que conseguimos parametrizar a consulta e paginar os dados, abaixo segue um exemplo de paginação com PostgreSQL.

Agora que já sabemos basicamente como funciona a clausula LIMIT e OFFSET, é hora de por a mão na massa criando o banco de dados, tabela e inserindo os dados fictícios.
 
Abaixo segue o script para criar o banco de dados “blog” e  a tabela artigos “artigos“:

Agora que já temos o banco e a tabela criados vamos inserir alguns registros, para podermos explorar todas as funcionalidades da paginação vamos inserir 35 registros, onde cada página vai conter 5 registros, totalizando 7 páginas. Vou usar uma função para executar vários INSERTs, assim fica mais fácil de realizar a inclusão dos 35 registros, lembrando que os dados em si não tem importância, a parte que nos interessa é a quantidade de registros.
 

Com isso já temos toda a parte de banco de dados finalizada, agora vamos para o principal o script da index.php mas agora com toda a lógica PHP de consulta e paginação, para que esse código funcione é importante mencionar que a extensão pdo_pgsql.dll (Windows) ou pdo_pgsql.so (Linux) tem que estar habilitada no PHP, script segue abaixo:

 

Criando script de paginação com PostgreSQL

index.php

Observação: A folha de estilo CSS foi postado no  Paginação de Dados no PHP com PDO – Introdução.
 
O script está bem comentado além de ser idêntico ao artigo publicado Parte 2. A sintaxe PDO para consulta contínua sendo a mesma para todos os SGBDs, isso porque essa biblioteca abstrai todas as particularidades de cada SGBD.
 
1 – Define 2 constantes no início do script, sendo a primeira QTDE_REGISTROS, para identificar quantos registros quero exibir por página, nesse caso apenas 5. Segunda constante RANGE_PAGINAS, serve para identificar quantas opções de páginas para navegação vou exibir antes e depois da página em destaque, nesse exemplo quero apenas 1 página (2 – 3 – 4).

 
2 – Nesse trecho fazemos uma validação do parâmetro (page) recebido via GET, verificando se o parâmetro page existe e se o valor é numérico, caso uma das validações não seja verdadeira atribuímos o valor “1” para variável $pagina_atual.

 
3 – Nessa linha estou calculando qual será a linha inicial da consulta, baseado no parâmetro passado via URL e no valor da constante QTDE_REGISTROS.

 
4 – Nessa linha temos a mágica, com a clausula LIMIT e OFFSET sendo parametrizadas pelos valores recebidos e calculados conseguimos montar a paginação com PostgreSQL.

 
5 – O segredo para saber quantas páginas serão necessárias é saber quantos registros serão retornados, podemos fazer isso executando um COUNT(*) na tabela. Com esse resultado basta dividi-lo pela quantidade de registros que iremos exibir por página, nesse caso pela constante QTDE_REGISTROS. Esse valor também serve para sabermos qual será a última página.

 
6 – Nesse conjunto de linhas fica toda a mágica da paginação, coloquei os nomes das variáveis bem intuitivos. Observem que para deixar o código mais legível estou usando em alguns pontos operadores TERNÁRIOS, para não poluir o código com vários IFs simples. Observem que para calcular a quantidade de páginas basta dividir o total de registros pela constante QTDE_REGISTROS por página $ultima_pagina = ceil($valor->total_registros / QTDE_REGISTROS).

 
7 – O código abaixo utiliza classes que criei no CSS para esconder ou exibir os botões de Primeira, Anterior, Próxima e Última página, conforme a necessidade.

Paginação Inicial
  

Abaixo temos o resultado final quando acessamos a primeira página, notem que não temos opções para o primeiro e nem registro anterior.
 
Paginação de dados início
 
Agora acessando a página “3” temos opções baseadas no range, com 1 página anterior e 1 página posterior, além das opções de primeira, anterior, próxima e última página.
 
Paginação de dados no meio
 
E para finalizar, acessando a última página “7” temos a opção de exibir uma página anterior “6” e os botões anterior e primeira página.
 
Paginação de dados no fim
 
Bom pessoal, nesse artigo demonstrei como construir paginação com PostgreSQL e com isso chegamos ao final desse terceiro artigo, como já citei anteriormente é evidente que existem diversas maneiras de se montar esse layout de paginação, com variações de CSS, HTML e lógica PHP. Na internet existem diversos plugins para esse tipo de funcionalidade, os principais frameworks para PHP possuem métodos para isso, mas antes de usar soluções prontas é interessante saber como funciona, quais as limitações do SGBD que você está usando em seu projeto para se trabalhar com paginação.
 
Até a próxima …
Post relacionado:  PDO - conexão seguindo padrão Singleton no PHP
Show Buttons
Hide Buttons