Tanto o MySQL quanto o Postgresql suportam um recurso muito útil para paginação de resultados, chamado de OFFSET, normalmente utilizado com LIMIT.
Neste post, veremos como utilizar o LIMIT e o OFFSET para paginar resultados de uma SQL.
A cláusula LIMIT é utilizada para limitar o número de resultados de uma SQL. Então, se sua SQL retornar 1000 linhas, mas você quer apenas as 10 primeiras, você deve executar uma instrução mais ou menos assim:
SELECT coluna FROM tabela LIMIT 10;
Agora, vamos supor que você quer somente os resultados de 11 a 20. Com a instrução OFFSET fica fácil, basta proceder da seguinte forma:
SELECT coluna FROM tabela LIMIT 10 OFFSET 10;
O comando OFFSET indica o início da leitura, e o LIMIT o máximo de registros a serem lidos. Para os registros de 61 a 75, por exemplo:
SELECT coluna FROM tabela LIMIT 15 OFFSET 60;
Com este recurso, fica fácil paginar os resultados de uma SQL e mostrar ao usuário apenas a página, ao invés de retornar todos os registros da tabela. Uma tabela com 2000 registros, por exemplo, fica muito melhor mostrar ao usuário de 10 em 10, por exemplo, e diminui a carga no banco de dados, melhorando a sua performance.
Referência:
http://www.petefreitag.com/item/451.cfm
Espero ter ajudado.
Abraço!
show, so tive um pouco de dificuldade de calcular o offset, mas deu certo
Valeu, muito prático!
Explicação rápida e prática. Parabéns ao autor.
Agora, vamos supor que você quer (somente os resultados de 11 a 20)…
O comando OFFSET indica o início da leitura, e o LIMIT o máximo de registros a serem lidos. Para os registros (de 60 a 75)…
porque no exemplo de cima o 10 não é incluido mas no outro o 60 é?
Anderson, você está certo. O comando “limit 15 offset 60” mostra os resultados de 61 a 75 (e não de 60 a 75).
Vou fazer a edição do post.
Obrigado!
Hallan obrigado ajudou muito.
Uma dúvida, se eu pegar o limit com group by, ele vai pegar os registros especificados pelo limit, mas analizara todos os registros da fatia determinada pelo where né?
“select marca, count(*) nas total from tabela group by marca limit 10”,
No caso de haver mais de 10 marcas, o banco vai procurar em todos os registros se tem mais marcas para agregar a coluna total, correto?
Obrigado
Muito bom, obrigado
Obrigado amigo, simplesmente fantástico 😀
Woow, valeu