+2

Paginação de Resultados com MSSQL

criado por Joel Silva dos Anjos em 08/01/2003 7:52pm
O Microsoft SQL Server infelizmente não suporta o LIMIT do MySQL, com o qual é possível "separar" somente algumas linhas de uma consulta. Portanto, se você quiser fazer uma paginação de resultados, você tem duas escolhas:

1. Fazer um "for" com o odbc_fetch_row() e passar o parâmetro row_number para separar do seu resultado somente as linhas que te interessam (não é possível fazer isso com o mssql_fetch_row()). Mas aí você corre o risco de a tabela ter milhares ou milhões de registros e sobrecarregar o coitado do servidor.

2. Usar a seguinte query:

<?php
$query = "SELECT
              *
          FROM (SELECT TOP $linhas *, $ordem AS Ordenar
                   FROM (SELECT TOP $ultima *
                         FROM $tabela
                         WHERE $condicao
                         ORDER BY $ordem ASC) x
                   ORDER BY x.$ordem DESC) t          
          ORDER BY t.Ordenar";
?>

$linhas: quantas linhas você quer retornar.
$ordem: a coluna pela qual você ordena os dados.
$ultima: a última linha da sua consulta.
$tabela e $condicao: auto explicaveis.

Explicando melhor: Esta query pega os primeiros n registros, depois ela inverte a ordem destes n registros e pega os primeiros m. Assim você terá os registros de m a n. O select mais externo serve para reordenar os dados.

Reforçando o que o amigo Daniel Melo disse em seu artigo "É possível padronizar o acesso a banco de dados?" (disponível em http://phpbrasil.com/articles/article.php/id/240), provavelmente esta query só funcionará com o Microsoft SQL Server, pois não conheço outro banco de dados que suporte a clausula TOP.

Comentários:

Mostrando 1 - 6 de 6 comentários
Robson Mello disse:
a função top também pode ser utilizada pelo access.
26/01/2005 1:41pm (~20 anos atrás)

Bem, não é questão de gostar... Mas de necessidade. Quantas empresas não usam SQL Server com Windows?
Eu também não gosto, ficar preso a uma plataforma é pura alienação... Mas, e se um determinado cliente, que já tem toda infra-estrutura montada com M$, precisar do seu serviço? Temos que estar prontos!!
05/11/2004 2:18pm (~20 anos atrás)

Kem nao gosta.. eh FA do Open-Source e odeia microsoft.

Mas eh uma boa dica, eu num curto, mas si um dia precisar usar, irei lembrar desse artigo.
21/01/2003 9:27pm (~22 anos atrás)

Rafael Zanoni disse:
Interessante esta query, com certeza é muito útil para quem utiliza SQL Server e quer paginar os resultados.

Quem não gosta é pq não nunca usou.
.....
21/01/2003 1:33pm (~22 anos atrás)

Juan Roldán disse:
E ainda, quando a plataforma é windows
20/01/2003 3:02pm (~22 anos atrás)

Juan Roldán disse:
Nunca gostei de mssql!!
20/01/2003 3:01pm (~22 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)