Ver Mensaje Individual
  #13 (permalink)  
Antiguo 27/03/2013, 11:28
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: ordenar alfabeticamente mediante php+ajax

En realidad el problema es que no estás entendiendo el uso del LIMIT.
Esa cláusula no expresa un rango de valores dado para un campo, sino la cantidad de registros a mostrar de la respuesta completa de la consulta.
LIMIT tiene dos parámetros: el primero indica el offset, es decir, el desplazamiento del punto de inicio desde el registro 1 (es base 1) hacia adelante (o "abajo"), y el segundo parámetro indica cuántos registros se tomarán para la respuesta.
el primero de los dos parámetros se puede omitir, y MySQL asumirá que debe contar desde el primero registro.
En ese contexto, suponiendo que la consulta devuelva esos cinco registros, la consulta debe decir:
Código MySQL:
Ver original
  1. SELECT id,nombre
  2. FROM pais
  3. WHERE id_region=1 AND id<$lastmsg
Para la segunda debería decir:
Código MySQL:
Ver original
  1. SELECT id,nombre
  2. FROM pais
  3. WHERE id_region=1 AND id<$lastmsg
  4. LIMIT 5, 5;
Para la tercera será:
Código MySQL:
Ver original
  1. SELECT id,nombre
  2. FROM pais
  3. WHERE id_region=1 AND id<$lastmsg
  4. LIMIT 10, 5;
y así sucesivamente.
¿Cómo se calcula si se debe seguir?
Simple: Si devuelve menos que la cantidad pedida, es que se llegó al final de la tabla. Y si devuelve cero registros, es que la consulta anterior los agotó.

Todo este tipo de preguntas se puede resolver sin tanta discusión si te tomas la molestia de acudir al manual de referencia:
Cita:
La cláusula LIMIT puede usarse para restringir el número de registros retornados por el comando SELECT. LIMIT tiene uno o dos argumentos numéricos, que deben ser enteros positivos (incluyendo cero).

Con dos argumentos, el primer argumento especifica el desplazamiento del primer registro a retornar. El desplazamiento del registro inicial es 0 (no 1):
Código MySQL:
Ver original
  1. mysql> SELECT * FROM table LIMIT 5,10;  # Retrieve rows 6-15

Por compatibilidad con PostgreSQL, MySQL también soporta la sintaxis LIMIT row_count OFFSET offset.

Para recibir todos los registros de un desplazamiento hasta el final del conjunto de resultados, puede usar algún número grande para el segundo parámetro. Ete comando recibe todos los registros desde el 96th hasta el último:
Código MySQL:
Ver original
  1. mysql> SELECT * FROM table LIMIT 95,18446744073709551615;

Con un argumento, el valor especifica el número de registros a retornar desde el comienzo del conjunto de resultados:
Código MySQL:
Ver original
  1. mysql> SELECT * FROM table LIMIT 5;     # Retrieve first 5 rows

En otras palabras, LIMIT n es equivalente a LIMIT 0,n.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)