2011-12-14 72 views
9

我從MySQL獲取待辦事項標題和截止日期的數組。我想按日期排列,最早的排在最前面。但是有一些沒有日期的待辦事項。這些todos我不想在第一個位置顯示,而是在我的列表底部顯示。不幸的是,MySQL首先放空了。PHP,MYSQL:按日期排序,但空的日期最後不是第一個

有沒有什麼辦法可以做到這一點在一個查詢(不能使用MySQLi,使用CI的ActiveRecord)。我可以對沒有日期的所有待辦事項運行第二個查詢,並將它們放在底部。但是我想在一個查詢中完成 - 如果可能的話?

回答

31

你可以在MySQL中使用ORDER BY子句。首先排序NULL,然後是日期。

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

注:這是假定沒有日期行是NULL

+0

酷:-)工作正常!我必須將空的變成NULL而不是0000-00-00,但這正是我所需要的。 – suntrop 2011-12-15 18:30:09

+1

好。是的,`NULL`是沒有日期的行比`0000-00-00`更好的表示。 – 2011-12-15 18:39:42

+1

DUDE我愛你! (是的,這解決了我的問題)。 – 2013-12-11 07:38:40

0

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

可能在ORDER BY子句中添加NVL(thedate, to_date('2099-12-31','yyyy-mm-dd'))

0

您可以使用此:

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

那麼,作爲一個純粹的MySQL的答案,我可能會做喜歡這個。

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