Ver Mensaje Individual
  #4 (permalink)  
Antiguo 22/06/2012, 11:59
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: [B]Paginación con ids salteados en la tabla.[/B]

Hola im_manu3l:

Creo que te estás confundiendo, y nos estás confundiendo, con el uso del LIMIT, con los datos que pones es imposible que obtengas los resultados que estás comentando. Checa este script, ejecutado en la consola de MySQL Ver 5.5.25

Código MySQL:
Ver original
  1. mysql> select version();
  2. +-----------+
  3. | version() |
  4. +-----------+
  5. | 5.5.25    |
  6. +-----------+
  7. 1 row in set (0.06 sec)
  8.  
  9. mysql> SELECT * FROM tabla;
  10. +------+--------+
  11. | id   | ciudad |
  12. +------+--------+
  13. |   20 | paris  |
  14. |   42 | paris  |
  15. |   73 | paris  |
  16. +------+--------+
  17. 3 rows in set (0.02 sec)


Observa, en primer lugar que la consulta que propones NO REGRESA REGISTROS, mientras que tú nos estás diciendo que te está mostrando el registro con id 20...

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla WHERE ciudad='paris' LIMIT 20,3;
  2. Empty set (0.00 sec)

Observa ahora, que con los datos que estás poniendo de ejemplo NO NECESITAS HACER REFERENCIA A LOS ID'S, sino a las posiciones... Lo único que debes cuidar ES EL ORDEN EN QUE ESTÁS RECUPERANDO LA INFORMACIÓN:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla WHERE ciudad='paris' ORDER BY id LIMIT 1,2;
  2. +------+--------+
  3. | id   | ciudad |
  4. +------+--------+
  5. |   42 | paris  |
  6. |   73 | paris  |
  7. +------+--------+
  8. 2 rows in set (0.00 sec)
  9.  
  10. mysql> SELECT * FROM tabla WHERE ciudad='paris' ORDER BY id DESC LIMIT 1,2;
  11. +------+--------+
  12. | id   | ciudad |
  13. +------+--------+
  14. |   42 | paris  |
  15. |   20 | paris  |
  16. +------+--------+
  17. 2 rows in set (0.00 sec)

Según la sintaxis del Limit, cuando utilizas dos números como parámetros, el primer número determina a partir de qué POSICION comenzar a recuperar valores y el segundo valor CUANTOS registros vas a regresar como máximo. Cuando utilizas un solo parámetro, es lo mismo que enviar Limit 0, n, es decir indicarle que comience desde la primer posición:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla WHERE ciudad='paris' ORDER BY id LIMIT 2;
  2. +------+--------+
  3. | id   | ciudad |
  4. +------+--------+
  5. |   20 | paris  |
  6. |   42 | paris  |
  7. +------+--------+
  8. 2 rows in set (0.00 sec)
  9.  
  10. mysql> SELECT * FROM tabla WHERE ciudad='paris' ORDER BY id LIMIT 0,2;
  11. +------+--------+
  12. | id   | ciudad |
  13. +------+--------+
  14. |   20 | paris  |
  15. |   42 | paris  |
  16. +------+--------+
  17. 2 rows in set (0.01 sec)

Te recomiendo que busques más ejemplos acerca del uso de LIMIT si es que todavía tienes dudas, y si tienes un comportamiento con tus consultas distinto al que aquí te muestro, pues que revises tus datos de ejemplo, pues creo que ahí es donde está el problema.

Saludos
Leo.