Paginação de Resultados com MSSQL
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:
$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.
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.
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!!
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.
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)
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.
.....
Quem não gosta é pq não nunca usou.
.....
21/01/2003 1:33pm
(~22 anos atrás)