Ver Mensaje Individual
  #2 (permalink)  
Antiguo 20/02/2013, 12:42
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: Ordenar por fecha futura ascendente y fecha pasada descendente

Hola erxaca:

Entiendo la idea de lo que intentas hacer, con el CASE-WHEN te estaría colocando primeramente todos los registros con fecha posterior a la actual, pero el detalle está en que al ordenar por el segundo campo lo hace de manera completa, es decir, no puedes indicarle a una ordenación que ordene primero unos registros de cierta manera y el resto de otra manera... Lo único que se me ocurre es que hagas algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +------+------------+
  3. | id   | fecha      |
  4. +------+------------+
  5. |    1 | 2013-12-21 |
  6. |    2 | 2013-02-21 |
  7. |    3 | 2013-02-20 |
  8. |    4 | 2013-03-02 |
  9. |    5 | 2013-01-17 |
  10. |    6 | 2013-02-19 |
  11. +------+------------+
  12. 6 rows in set (0.00 sec)
  13.  
  14. mysql> SELECT * FROM (
  15.     ->   SELECT 0 temp, fecha
  16.     ->   FROM tabla
  17.     ->   WHERE fecha >= CURDATE()
  18.     ->   ORDER BY fecha
  19.     -> ) T1
  20.     -> UNION ALL
  21.     -> SELECT * FROM (
  22.     ->   SELECT 1 temp, fecha
  23.     ->   FROM tabla
  24.     ->   WHERE fecha < CURDATE()
  25.     ->   ORDER BY fecha DESC
  26.     -> ) T2;
  27. +------+------------+
  28. | temp | fecha      |
  29. +------+------------+
  30. |    0 | 2013-02-20 |
  31. |    0 | 2013-02-21 |
  32. |    0 | 2013-03-02 |
  33. |    0 | 2013-12-21 |
  34. |    1 | 2013-02-19 |
  35. |    1 | 2013-01-17 |
  36. +------+------------+
  37. 6 rows in set (0.00 sec)

tengo dudas con respecto a la fecha (21/12/2013), creo que te equivocaste al hacer tu ordenación, porque esta fecha, según yo debería ser la última de la primer sección...el campo temp con los valores de 0 y 1 en realidad están de más, los puse para que lo asociaras con lo que estás intentando hacer... observa que de esta manera sí puedes indicar en el ORDER BY dos comportamientos distintos para casa sección:

Código:
ORDER BY fecha --> de manera ascendente para la primer sección

ORDER BY fecha DESC --> de manera descendente para la segunda sección
Dale un vistazo para ver si te puede servir.

Saludos
Leo.