quarta-feira, novembro 12, 2008

Paginação em queries MySql

Infelizmente esta é uma funcionalidade que não existe em todos os tipos base de dados, porque realmente dá imenso jeito e tem uma sintaxe bastante fácil de utilizar. Então a sintaxe é a seguinte:

SELECT * FROM TableXPTO
WHERE columnName = 'XPTO'
LIMIT 20, 10

O que vai acontecer é que serão retornados 10 tuplos começando no tuplo 20. Se por exemplo quisermos uma paginação de 10 tuplos/página, estaríamos a receber os 10 tuplos da 3ª página com esta query.

3 comentários:

Anónimo disse...

O problema é se são adicionados registos entre pedidos diferentes

Tiago Sousa disse...

Sim, mas isso é o problema de qualquer tipo de paginação. Normalmente o truque que uso é ordenar por data, id ou qualquer coisa que seja sequencial ou que tenha noção temporal.
Isto provoca que os registos entrem no final da paginação não havendo aparentes inconsistências.

Anónimo disse...

Eu não conheço nenhuma BD que não tenha limit (ou equivalente). Pode é ser uma variação manhosa, como a de MS SQL Server. Em MySQL, algo que também me tem dado muito jeito (e não afecta demasiado a performance, ao contrário do que o folclore diz) é o SQL_CALC_ROWS_FOUND ( exemplo aqui ).