LIMIT 60, 10, aquí no se puede.
Es algo que hemos discutido hoy y se han propuesto soluciones: sacar los 100 registros y dejarlos en memoria, en $_SESSION, crear una tabla temporal y dejar ahí el resultados, hacer vistas que comprendan menos datos... todo ello poco escalable y extensible.
Y hablo con 100 registros, imaginemos miles, millones... Desde luego no me imagino a sitios como Yahoo!, Flickr, Twitter, del.icio.us, Digg, Meneame (por decir sitios que usan DBs como MySQL o Postgre) en los que le digas que quieres ver la página 100 de un listado y se tire 20 segundos cacheando resultados para que luego te vaya rápido, o guardando en memoria, ni nada de esas ñapas que habría que hacer con mssql.
Pero bueno, al menos con mssql hay un muy buen soporte técnico que en otros casos igual no tienes, y sabes los recursos que necestas para que todo vaya bien. set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- paginate 'select * from messages', 'id DESC', 100000, 100010
ALTER PROCEDURE [dbo].[Paginate](@Select VARCHAR(5000),
@OrderBy VARCHAR(1000),
@StartRow INT,
@EndRow INT)
AS
BEGIN
DECLARE @ColList VARCHAR(5000);
DECLARE @Where VARCHAR(5000);
DECLARE @i INT;
DECLARE @i2 INT;
DECLARE @tmp VARCHAR(1000);
DECLARE @dec VARCHAR(1000);
DECLARE @f VARCHAR(100);
DECLARE @d VARCHAR(100);
DECLARE @Symbol CHAR(2);
DECLARE @NullBoundaryCheck VARCHAR(1000);
DECLARE @SQL VARCHAR(8000);
DECLARE @Sort VARCHAR(1000);
SET @Sort = @OrderBy + ', '
SET @dec = ''
SET @Where = ''
SET @SQL = ''
SET @i = CHARINDEX(',' , @Sort)
WHILE @i != 0
BEGIN
SET @tmp = LEFT(@Sort, @i-1)
SET @i2 = CHARINDEX(' ', @tmp)
SET @f = LTRIM(RTRIM(LEFT(@tmp, @i2-1)))
SET @d = LTRIM(RTRIM(SUBSTRING(@tmp, @i2+1, 1000)))
SET @Sort = RTRIM(LTRIM(SUBSTRING(@Sort, @i+1, 1000)))
SET @i = CHARINDEX(',', @Sort)
SET @symbol = CASE WHEN @d = 'ASC' THEN '>' ELSE '<' END +
CASE WHEN @i = 0 THEN '=' ELSE '' END
SET @NullBoundaryCheck = CASE WHEN @i = 0
THEN CASE WHEN @d = 'ASC' THEN '@' ELSE '' END + @f + ' IS NULL'
ELSE
'@' + @f + ' IS ' + CASE WHEN @d = 'DESC' THEN '__NOT__' ELSE '' END + ' NULL AND ' +
@f + ' IS ' + CASE WHEN @d = 'ASC' THEN '__NOT__' ELSE '' END + ' NULL'
END
SET @dec = @dec + 'DECLARE @' + @f + ' SQL_VARIANT; '
PRINT 'n' + @ColList + 'n'
SET @ColList =
CASE WHEN
REPLACE(REPLACE(REPLACE(@colList, '>','='), '<','='), '__NOT__', '') IS NULL
THEN ''
ELSE
REPLACE(REPLACE(REPLACE(@colList, '>','='), '<','='), '__NOT__', '') + ' AND '
END + '((@' + @f + ' IS NOT NULL AND ' + @f + ' IS NOT NULL AND ' + @f + @Symbol + '@' + @f + ') OR (' + @NullBoundaryCheck + '))'
SET @Where = @Where + ' OR (' + @ColList + ') '
SET @SQL = @SQL + ', @' + @f + '= ' + @f
--PRINT @COLLIST
--PRINT @WHERE
--PRINT @SQL
END
SET @Where = REPLACE(@Where, '__NOT__', 'NOT')
SET @SQL = @dec + ' ' +
'SET ROWCOUNT ' + CONVERT(VARCHAR(10), @StartRow) + '; ' +
'SELECT ' + SUBSTRING(@SQL,3,7000) + ' FROM (' + @Select + ') A ORDER BY ' +
@OrderBy + '; ' +
'SET ROWCOUNT 0;' +
'SELECT TOP ' + CONVERT(VARCHAR(10), (1 + @EndRow - @StartRow)) + ' * FROM (' + @Select + ') A WHERE ' +
SUBSTRING(@Where,4,7000) + ' ORDER BY ' + @OrderBy + '; '
--PRINT @WHERE
PRINT @SQL
EXEC (@SQL)
END
Y una cosa muy importante: mysql 5 no es para nada lo qeu era mysql 3.23, y postgres 8 lo que era postgres 7. Hay que renovar eas mentalidad...
Saludos. Pulsa en los títulos para ver información sobre cómo comentar.
Todos los campos del formulario son opcionales menos el del PIN.
Usa el tabulador para autocompletar los nicks de otros comentaristas.
Si escribes @ y pulsas la tecla tabulador varias veces podrás recorrer la lista de nicks usados
Y si escribes # (almoadilla) y número (Ej.: #5) se substituirá directamente el nick del comentario correspondienmte al pulsar el tabulador.
Tags: a, strong, b, em, u, code, cite.
El tag a admite la propiedad href="..." para indicar la dirección.
Los tags también tienen autocompletado (al igual que los nicks). Para usarlos se pone por ejemplo strong + TABULADOR.

Todo el contenido bajo el dominio XERGIO.NET está sujeto a la licencia Creative Commons con las condiciones BY-SA. Web estandarizada en XHTML 1.0, CSS 2, RSS 2 y Atom 1.0.