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.
Febrero 1st, 2009 at 6:54 pm
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.
Febrero 2nd, 2009 at 6:13 pm
@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.
Febrero 4th, 2009 at 12:03 pm
Asier, muchas gracias por el artículo.
Eres un crack!
Mayo 5th, 2009 at 9:35 am
no funciona bien lo del top con id autonumericos.!!!!!!