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.
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.
O problema é se são adicionados registos entre pedidos diferentes
ResponderEliminarSim, 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.
ResponderEliminarIsto provoca que os registos entrem no final da paginação não havendo aparentes inconsistências.
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 ).
ResponderEliminar