Ver Mensaje Individual
  #6 (permalink)  
Antiguo 21/07/2010, 01:20
jurena
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Comparando fechas

Pongo la explicación que te puse en el otro lugar, por si sirve a alguien:

Una consulta con subconsulta y subconsulta. Creo que no será muy ineficiente, pues me traigo ocho datos y sobre ellos hago las subconsultas. El primer select es para ordenar por fecha...

SELECT t2.* FROM (SELECT t1.fecha, t1.diferencia as dif, t1.ord2 FROM ((SELECT fecha, DATEDIFF(CURDATE(),fecha) diferencia, 'ant' ord2 FROM `tabla` where fecha < CURDATE() ORDER BY fecha DESC limit 4 )
UNION ALL
(SELECT fecha,DATEDIFF(fecha,CURDATE()), 'post' FROM `tabla` where fecha > CURDATE() order by fecha ASC limit 4))t1 ORDER BY t1.diferencia, ord2 LIMIT 4)t2 ORDER BY t2.fecha

Observa que primero me traigo las cuatro fecha anteriores y las cuatro posteriores, con sus diferencias respecto a hoy. Luego las ordeno por la diferencia y corto las cuatro más próximas, sean anteriores o posteriores (uso los alias ant y post porque sirven para ordenar alfabéticamente y son transparentes), pero estableciendo que ordene, primero por la diferencia en tiempo y luego porque sea anterior o posterior; luego limito las 4 primeras, y finalmente ordeno por la fecha para que te salgan seguidas. He puesto la tabla tabla y el campo llamado fecha. Cambia esos nombres por los de tu tabla y campos.
Hay un problema, que haya más de cuatro eventos un mismo día anterior. La consulta te dejaría fuera y no estarías controlando las que dejas fuera. No sé si tienes un campo id que nos sirviera como segunda ordenación...