Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[B]Paginación con ids salteados en la tabla.[/B]

Estas en el tema de [B]Paginación con ids salteados en la tabla.[/B] en el foro de Mysql en Foros del Web. Bien tengo un código de paginación en php y mysql, sin embargo quisiera que me paginara resultados salteados. id ciudad 20 paris 42 paris 73 ...
  #1 (permalink)  
Antiguo 22/06/2012, 00:31
Avatar de im_manu3l  
Fecha de Ingreso: octubre-2011
Ubicación: Aguascalientes
Mensajes: 12
Antigüedad: 12 años, 7 meses
Puntos: 0
[B]Paginación con ids salteados en la tabla.[/B]

Bien tengo un código de paginación en php y mysql, sin embargo quisiera que me paginara resultados salteados.

id ciudad

20 paris
42 paris
73 paris

Ejemplo: SELECT * FROM tabla WHERE ciudad=paris LIMIT 0,2;

o sea que me mostrara el

id ciudad
20 paris
42 paris

el problema es que limit hace esto, desde el registro 0 hasta el registro 2 por lo tanto no me muestra nada :/ ¿Que puedo hacer?
  #2 (permalink)  
Antiguo 22/06/2012, 01:58
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: [B]Paginación con ids salteados en la tabla.[/B]

SELECT * FROM tabla WHERE ciudad="paris" LIMIT 0,2;

o

SELECT * FROM tabla WHERE ciudad="paris" LIMIT 2;

Ambas lo que retornan es desde el primer registro, dos registros (eso es distinto a "desde el registro 0 hasta el registro 2")

LIMIT 0,2 --- registro primero y segundo

LIMIT 3,2 --- registro cuarto y quinto

y considerado los registros seleccionados por la query no los de la tabla.

Ahora bien, nada te asegura que el resultado sea

id ciudad
20 paris
42 paris

podria ser que en algun momento te retornara

id ciudad
20 paris
73 paris

o

id ciudad
42 paris
73 paris

puesto que no estas indicando en que orden los quieres.... y por lo tanto el motor retornará, abreviando, los que encuentre primero en función de la lectura más rápida posible del disco.


Código MySQL:
Ver original
  1. FROM tabla
  2. WHERE ciudad="paris"
  3. LIMIT 0,2;

retornará seguro

id ciudad
20 paris
42 paris

Código MySQL:
Ver original
  1. FROM tabla
  2. WHERE ciudad="paris"
  3. LIMIT 0,2;

retornaria seguro

id ciudad
73 paris
42 paris


Cita:
el problema es que limit hace esto, desde el registro 0 hasta el registro 2 por lo tanto no me muestra nada :/ ¿Que puedo hacer?
Si no muestra nada el problema es otro, los delimitadores "paris" quizas....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 22/06/2012 a las 02:13
  #3 (permalink)  
Antiguo 22/06/2012, 11:24
Avatar de im_manu3l  
Fecha de Ingreso: octubre-2011
Ubicación: Aguascalientes
Mensajes: 12
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: [B]Paginación con ids salteados en la tabla.[/B]

id ciudad

20 paris
42 paris
73 paris

La consulta si me muestra datos, pero solo cuando pongo en el limit explicitamente esto:

SELECT * FROM tabla WHERE ciudad='paris' LIMIT 20,3;
me muestra

id ciudad
20 paris

Lo que veo es que el limit se guia por el id, no tanto por los registros que encontró primero.
  #4 (permalink)  
Antiguo 22/06/2012, 11:59
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.

Etiquetas: ids, php, select, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:55.