Paginação PHP + SQL Server
Bom Dia ...
Esses dias comecei a fazer um E-Commerce e necessitei de fazer paginação de resultados devido a fazer busca de produtos no site.
Porém, o banco de dados aqui é SQL Server.
No Fórum e na Net, só achei exemplos de paginação em MySQL, usando na query de consulta a função LIMIT. Mas no SQL Server não possui essa função que cai entre nós, é fácil fazer paginação usando o LIMIT.
Daí fui procurando na Net sobre SIMULAR o LIMIT no SQL. Achei, mas tive que incrementar algumas coisas na query.
Enfim, não é uma paginação complexa, é simples:
Primeira - Anterior - Próxima - Última
Eu queria assim:
| 1 | 2 | 3 | 4 | 5 | 6 |
Mas não estou com muito tempo de pensar nisso. Talvez seja até mais simples do que eu imagino, mas realmente estou sem tempo de pesquisar, até fiquei um tempo sem entrar aqui no fórum esses últimos dias.
Vou postar o arquivo, paginacao.php.
Gostaria que vocês analisassem e postassem o que acharam, o que eu posso melhorar nela ou até mesmo corrigir.
Detalhe: Eu não consegui fazer o link Última, para ir para a Última Página de resultados e consequentemente fazer o Anterior a Última.
Só falta esse pequeno detalhe que eu disse acima para terminar esse arquivo.
Eu postei aqui em Artigos, Tutoriais e Matérias (PHP) devido a demanda de pessoas procurando saber como se faz paginação em SQL Server.
Obrigado!
<?php
require('conexao.php');
# Variável Para Definir Página Atual
if(isset($_GET['pg_atual']) && $_GET['pg_atual'] != 0)
{
$pg_atual = (int)$_GET['pg_atual'];
# Limite de Produtos Por Página
$limite = $limite + $pg_atual;
}
else
{
$pg_atual = 0;
# Limite de Produtos Por Página
$limite = 9;
}
# Variável Que Recebe O Valor Vindo Do Formulário
$produto = 'sa';
# Select Para Trazer O Total de Produtos
$sql = "select count(produto_codigo) as total_produtos from produtos";
$exe = mssql_query($sql);
$res = mssql_fetch_assoc($exe);
$total_registros = $res['total_produtos'];
# Select Para Trazer Os Resultados Referente a Filtragem Com Limite de 9 Produtos Por Página
$qry = "select produto_codigo from ( select top 9 produto_codigo from ( select top $limite
produto_codigo from produtos where descricao_tecnica like '$produto%' order by produto_codigo asc)
as ID1 order by produto_codigo desc) as ID2 order by produto_codigo asc";
$exec = mssql_query($qry);
# Laço Para Mostrar Os Produtos
while($res = mssql_fetch_array($exec))
echo $res['produto_codigo'].'<br />';
# -----------------------------------------------
# Variável Para Definir Última Página --- Podem Fazer Aqui o Cálculo
# -----------------------------------------------
# Variável Para Definir Valor de Página Anterior
$anterior = $pg_atual - $limite;
# Se Estiver Na Primeira Página Não Mostrar Links, Somente Os Nomes
if($anterior < 0)
{
echo "Primeira - Anterior -";
$pg_atual = 9;
}
else
{
echo "<a href='paginacao.php?pg_atual=0'> Primeira </a> - ";
echo "<a href='paginacao.php?pg_atual=$anterior'> Anterior </a> - ";
}
# Variável Para Definir Valor da Página Posterior
$proxima = $pg_atual + $limite;
# Se Estiver Na Última Página Não Mostrar Links, Somente Os Nomes
if($proxima > $total_registros)
{
echo "Próxima - Última";
}
else
{
echo "<a href='paginacao.php?pg_atual=$proxima'> Próxima </a> - ";
echo "<a href='paginacao.php?pg_atual=$ultima'> Última </a>";
}
?>Discussão (2)
Carregando comentários...