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

Consulta para paginar

Estas en el tema de Consulta para paginar en el foro de Mysql en Foros del Web. Hola: Estoy implementando una paginación donde luego de conseguir el número total de registros y calcular el número de páginas a partir de un nº ...
  #1 (permalink)  
Antiguo 20/01/2009, 12:38
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Consulta para paginar

Hola:

Estoy implementando una paginación donde luego de conseguir el número total de registros y calcular el número de páginas a partir de un nº constante de registros, quiero añadir información de las fechas que abarca cada página... en resúmen, si cada página tiene 0 registros, quiero leer el campo fecha de los registros 1-30, 31-60,61-90, etc...

Antes obtenía todos los id's y la consulta la hacía con un where id in([id's calculados con php]), pero quería saber si existe alguna sentencia que se haga solo con mysql... he visto en el manual cosas como use index o force index, pero no sé si es lo que necesito, además que no encontré información de uso que me funcione en mysql 4 (versión donde debo implementarlo...)

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #2 (permalink)  
Antiguo 20/01/2009, 13:08
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Consulta para paginar

Tal vez no te haya entendido, caricatos,
pero si lo que buscas es la lista de fechas de cada una de esas referencias y ya tienes en un array los valores traídos en la consulta que usa limit, puedes usar el GROUP_CONCAT()
SELECT GROUP_CONCAT(CAST(fecha AS CHAR) SEPARATOR ',' ) from nombretabla where id IN (1,2,3,4,5,...30)
pero esto sería una segunda consulta, una vez encontrado el número de id mediante LIMIT. No permite muchas alegrías MySQL con los datos procedentes de LIMIT.
Además, podrías ordenar las fechas de ese GROUP_concat usando ORDER BY fecha DESC antes de SEPARATOR y sin usar comas...

Probablemente no te refieras a eso.

De todas formas, el select primero con el limit 1,30, por eje. puede traerse todos los campos, incluida la fecha, creo, y no habría necesidad de una segunda consulta.

O tal vez te refieres a volver a situar el puntero en el comienzo de una consulta para recorrer de nuevo los datos tras un primer recorrido. Para esto:
mysql_data_seek($result, 0);

$sql = "SELECT * from <table>";
$result = mysql_query($sql);

while ($row = mysql_fetch_assoc($result)) {
// do stuff with $row
}

mysql_data_seek($result, 0);

while ($row = mysql_fetch_assoc($result)) {
// do other stuff with $row
}

Última edición por jurena; 20/01/2009 a las 16:50
  #3 (permalink)  
Antiguo 20/01/2009, 17:31
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Consulta para paginar

Hola:

Pues no parece que sea la respuesta... desde luego que agradezco las respuestas, pero aunque creo que no existe esa respuesta milagrosa, te muestro un ejemplo que funciona: Galería de Postales de la Costa del Sol (galería: 2008)... en esa página, al posarse el ratón sobre los enlaces a cada página, el atributo title del enlace muestra el rango de fechas... es lo que tengo ahora, pero pensaba optimizarlo... en vez obtener todos los items de la tabla, para rescatar las fechas de las referencias (1-30,31-60,...), hacer una consulta del tipo:
Código:
select fecha from galeria where id in (1,30, 31, 60...)
Pero los id's no siempre son correlativos, porque las inserciones pueden no serlo, o pueden modificarse o borrarse algunos registros...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #4 (permalink)  
Antiguo 20/01/2009, 20:04
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Consulta para paginar

Mmmm la limitante de la versión de MySQL es importante ya que si estuvieras en MySQL 5, puedes crear un stored procedure y regresar las fechas junto con los ids, y así evitar hacer dos consultas por separado.

Saludos.
  #5 (permalink)  
Antiguo 21/01/2009, 04:09
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Consulta para paginar

Hola:

La verdad es que antes de preguntar me fijé en la versión de mysql donde pensaba aplicar el sistema, ya que en local normalmente tengo versiones más modernas (Ahora uso WOS y la versión es 5.6 creo)... hay veces que implemento cosas en local y no corren a la primera en el server, así que creo que hice bien en controlar la versión...

Pues entonces creo que voy a buscar todas las fechas y con php hacer la selección... de todos modos la consulta apenas será de menos de mil datos, y mysql está preparado para un volumen de datos muy superior.

Muchas gracias por todo.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #6 (permalink)  
Antiguo 21/01/2009, 08:34
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Consulta para paginar

Caricatos,

no sé cuál es la consulta por la que te traes los datos de la base. En cualquier caso, hoy MySQL permite hacer una sola consulta para sacar el total de lo buscado y los datos ... y todo en una misma consulta.
Mira sobre la consulta SELECT SQL_CALC_FOUND_ROWS * FROM tabla LIMIT ...
y la posibilidad de sacar el total mediante SELECT FOUND_ROWS() en
http://dev.mysql.com/doc/refman/5.0/...ion_found-rows
De todas formas, si pusieras la sintaxis de tu consulta tal vez veríamos se es necesario trabajar con PHP o no.
  #7 (permalink)  
Antiguo 22/01/2009, 16:56
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: Consulta para paginar

Hola:

Para la paginación becesitaba saber el total de datos a paginar, así que usaba count(*), y veo que propones algo interesante que no conocía, pero ya que necesitaba todas las fechas y los 30 primeros ids, he usado 2 consultas:

select id, fecha from tabla, y luego de los 30 primeros ids hago una consulta con where id in (...)

Recuerdo que cuando estudié sql en oracle, se podían anidar las consultas, pero creo que mysql aún no admite ese tipo de sentencias (al menos la versión que tengo en el server)... y no tengo idea de como anidar esa consulta. De todos modos, estoy satisfecho con el resultado: Costa del Sol

Cuando se posa el puntero sobre las páginas se muestra el rango de fechas afectado.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #8 (permalink)  
Antiguo 22/01/2009, 17:02
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 2 meses
Puntos: 45
Respuesta: Consulta para paginar

a partir de la versión 4 mysql soporta subconsultas
__________________
"El conocimiento nos hace responsables."
twitter: @benjamingb
blog personal: http://codigolinea.com
ZF Manual en español http://manual.zfdes.com
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 10:07.