En mysql para devolver un rango de resultados en una consulta podemos hacerlo usando el comando Limit de la siguiente forma:
Select * from tabla Limit 4,8
Esto nos devuelve un rango de 8 resultados desde el 4º encontrado
Apunté como hacerlo en Oracle, también como hacerlo en Microsoft SQL Server 2005/2008, y ahora lo apunto para SQL Server 2000.
SELECT TOP 10 t.* FROM tabla as t where t.id = not in
( SELECT TOP 0 id from tabla order by id desc )
order by t.id desc
El primer TOP, el principal, indica el número de tuplas a devolver.
El segundo TOP, en la subconsulta, debe ser multiplicar 10 por el número de página de resultados a mostrar menos 1, es decir: (número de página-1) x número de filas a devolver.
En ese ejemplo, el top para la subconsulta sería 0 para la primera página, 10 para la segunda, 20 para la tercera y así sucesivamente.
No es la query mas optima del mundo, y si estas en una pagina muy alta puede hacer sufrir mucho a tu BBDD. Ademas, si tienes los records ordenador por id no seria mas facil jugar con esos datos? Siempre es mejor que un NOT IN.
Al menos, pon un indice en el ID.
@Alberto no no lo es, soy consciente. En este caso hay que jugar con la cache y evitar hacer paginaciones numéricas.
Sql Server no contaba con la función row_number ni similar en la versión 2000.
Asier, muchas gracias por el artículo.
Eres un crack!
no funciona bien lo del top con id autonumericos.!!!!!!