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

Consulta de Paginación por fechas...

Estas en el tema de Consulta de Paginación por fechas... en el foro de Bases de Datos General en Foros del Web. Hola! Estoy intentando realizar una consulta que discrimine por fechas(para paginar los datos y que sólo devuelva los de la página correspondiente y no todo ...
  #1 (permalink)  
Antiguo 25/09/2010, 18:18
 
Fecha de Ingreso: mayo-2005
Ubicación: Vimianzo. A Coruña
Mensajes: 230
Antigüedad: 18 años, 11 meses
Puntos: 1
Consulta de Paginación por fechas...

Hola!

Estoy intentando realizar una consulta que discrimine por fechas(para paginar los datos y que sólo devuelva los de la página correspondiente y no todo el conjunto).

El motor de BD es MySQL, aunque ese no es el problema.

Os comento, el problema lo presenta los campos por los que ordeno y/o discrimino, que tienen que ser la fecha y el ID.

Por ejemplo, tenemos los siguientes resultados, correspondientes a Eventos Pasados(es decir, eventos anteriores a hoy):

http://twitpic.com/2rzzjg


Bien, cuando se abre la pestaña de eventos pasados muestra 26,25 y 21 porque son los últimos que se han celebrado, ok?(está paginando a 3 elementos por página)

Ahora pulsamos el botón de Anteriores y se lanza la siguiente consulta:

Código SQL:
Ver original
  1. SELECT * FROM gp_eventos_prin
  2. INNER JOIN gp_eventos_detalle
  3. ON gp_eventos_prin.id_evento=gp_eventos_detalle.id_evento_prin
  4. WHERE gp_eventos_prin.fecha_evento<= "2010/10/09" AND gp_eventos_prin.id_evento<21
  5. ORDER BY gp_eventos_prin.fecha_evento DESC,gp_eventos_prin.id_evento ASC
  6. LIMIT 9

Que ocurre??

Que en vez de mostrar el 30,29 y 28 que serían los siguientes después de los dichos anteriormente, pues muestra el 18,20 y 19.

El caso es que la función que llama a ANTERIORES pasa el último evento mostrado en pantalla, que sería el ID 21 con fecha "2010/09/10".

La lógica dice que el botón ANTERIOR tiene que consultar y obtener los Eventos cuya fecha sea Igual o Inferior al último evento mostrado (porque igual? porque puede haber más eventos ese día...) y lo del ID es porque si no lo pongo, me mostrará igual los eventos que estaba mostrando...y eso no mola xD

Pero claro, como el ID es un número que incrementa automáticamente la BD...pues nos ha jodido, ya que puede haber un Evento con un ID mayor pero con una fecha menor al último mostrado(que es lo que ocurre en este ejemplo) y ahí nos ha jodido la consulta....



Es por eso que recurro a vosotros ya desesperado a ver si me podeis ofrecer una solución a este problemón...ya que no doy salido del bache...y ya no sé como crear la consulta para que me devuelva correctamente los datos...



Gracias por la ayuda y un Saludo a todos!





PD: lo mismo ocurre con el botón siguiente...

Os dejo aquí si quereis la función que contruye las query's:
Código C:
Ver original
  1. private static  MySqlCommand CMD_Eventos_Anteriores(string avance, Evento Ev_Ind,int Limit)
  2.         {
  3.             DateTime desde = DateTime.Now;
  4.             DateTime hasta = DateTime.Now;
  5.             DateTime calculos = DateTime.Now;
  6.             MySqlCommand sql;
  7.             MySqlParameter paramDesde;
  8.             MySqlParameter paramId;
  9.             MySqlParameter paramHasta;
  10.  
  11.             desde = DateTime.Now.AddDays(-1);
  12.  
  13.             switch (avance)
  14.             {
  15.                 case "anterior":
  16.                     sql = new MySqlCommand(@"SELECT * FROM gp_eventos_prin
  17.                                                    INNER JOIN gp_eventos_detalle
  18.                                                    ON gp_eventos_prin.id_evento=gp_eventos_detalle.id_evento_prin
  19.                                                    WHERE gp_eventos_prin.fecha_evento<= ?desde AND gp_eventos_prin.id_evento<?id
  20.                                                    ORDER BY gp_eventos_prin.fecha_evento DESC,gp_eventos_prin.id_evento ASC
  21.                                                    LIMIT ?limt");
  22.                     paramId = new MySqlParameter("?id", MySqlDbType.VarChar);
  23.                     paramId.Value = Ev_Ind.Id_Evento;
  24.                     sql.Parameters.Add(paramId);
  25.                     break;
  26.                 case "siguiente":
  27.                     sql = new MySqlCommand(@"SELECT * FROM gp_eventos_prin
  28.                                                    INNER JOIN gp_eventos_detalle
  29.                                                    ON gp_eventos_prin.id_evento=gp_eventos_detalle.id_evento_prin
  30.                                                    WHERE (gp_eventos_prin.fecha_evento>= ?desde AND gp_eventos_prin.id_evento!=?id) AND gp_eventos_prin.fecha_evento<= ?hasta
  31.                                                    ORDER BY gp_eventos_prin.fecha_evento DESC,gp_eventos_prin.id_evento ASC
  32.                                                    LIMIT ?limt");
  33.                     paramId = new MySqlParameter("?id", MySqlDbType.VarChar);
  34.                     paramId.Value = Ev_Ind.Id_Evento;
  35.                     sql.Parameters.Add(paramId);
  36.                     paramDesde = new MySqlParameter("?hasta", MySqlDbType.DateTime);
  37.                     paramDesde.Value = desde;
  38.                     sql.Parameters.Add(paramDesde);
  39.                     break;
  40.                 default:
  41.                     sql = new MySqlCommand(@"SELECT * FROM gp_eventos_prin
  42.                                                    INNER JOIN gp_eventos_detalle
  43.                                                    ON gp_eventos_prin.id_evento=gp_eventos_detalle.id_evento_prin
  44.                                                    WHERE gp_eventos_prin.fecha_evento<= ?desde
  45.                                                    ORDER BY gp_eventos_prin.fecha_evento DESC,gp_eventos_prin.id_evento ASC
  46.                                                    LIMIT ?limt");
  47.                     break;
  48.             }
  49.  
  50.             paramDesde = new MySqlParameter("?desde", MySqlDbType.DateTime);
  51.             if (avance == "default")
  52.                 paramDesde.Value = desde;
  53.             else
  54.                 paramDesde.Value = Ev_Ind.Fecha_Evento;
  55.             sql.Parameters.Add(paramDesde);
  56.             paramDesde = new MySqlParameter("?limt", MySqlDbType.Int32);
  57.             paramDesde.Value = Limit;
  58.             sql.Parameters.Add(paramDesde);
  59.  
  60.             return sql;
  61.         }
__________________
Técnico Superior en Desarrollo de Apliciones Informáticas

Etiquetas: fechas
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 18:34.