2011-12-14 6 views
9

Cobro una matriz con títulos de todo y fechas de vencimiento de MySQL. Quiero ordenarlo por fecha y tener el más viejo en la parte superior. Pero hay algunos todos sin una fecha. Estos todos no quiero mostrarlos en las primeras posiciones sino más bien al final de mi lista. Lamentablemente, MySQL puso primero los vacíos.PHP, MYSQL: Ordenar por fecha, pero las fechas vacías no son las últimas

¿Hay alguna manera de hacerlo? en una consulta (no se puede usar MySQLi, utilizando ActiveRecord de CI). Podría ejecutar una segunda consulta para todos todos sin fechas y ponerlos en la parte inferior. Pero me gustaría hacerlo en una consulta, si es posible.

Respuesta

31

Puede hacerlo en MySQL con la cláusula ORDER BY. Primero, ordene por NULL y luego la fecha.

SELECT * FROM your_table ORDER BY (date_column IS NULL), date_column ASC 

Nota: Esto supone filas sin fecha son NULL.

+0

Cool :-) Works fine! Tengo que cambiar los vacíos a NULL en lugar de 0000-00-00, pero entonces es exactamente lo que necesito. – suntrop

+1

Bueno. Sí, 'NULL' es una representación mucho mejor para row sin fecha que' 0000-00-00'. –

+1

TIPO TE AMO! (Sí, esto solucionó mi problema). –

0

SELECT * 
    FROM table 
    ORDER BY CASE your_date 
       WHEN '' THEN 'b' 
       ELSE 'a' 
      END, 
      date ASC 
0

posiblemente añadir un NVL(thedate, to_date('2099-12-31','yyyy-mm-dd')) en el orden por la cláusula

0

Puede utilizar esta:

select * from my_table 
order by if(isnull(my_field),1,0),my_field; 
+0

¿Por qué el uso de 'isnull()' * y * 'if()' –

0

Bueno, como una respuesta MySQL pura, probablemente hacerlo Me gusta esto.

select todo.title, todo.due_date 
    from todo 
    order by ifnull(todo.due_date, '9999-12-31') 
+0

'9999-12-31', realmente? ¡De Verdad! :) –

+5

@JasonMcCreary - Me imagino que estaré muerto para entonces :) –

+3

Muhahahaha! Gracias por contribuir con el error Y9999. –

Cuestiones relacionadas