我從MySQL獲取待辦事項標題和截止日期的數組。我想按日期排列,最早的排在最前面。但是有一些沒有日期的待辦事項。這些todos我不想在第一個位置顯示,而是在我的列表底部顯示。不幸的是,MySQL首先放空了。PHP,MYSQL:按日期排序,但空的日期最後不是第一個
有沒有什麼辦法可以做到這一點在一個查詢(不能使用MySQLi,使用CI的ActiveRecord)。我可以對沒有日期的所有待辦事項運行第二個查詢,並將它們放在底部。但是我想在一個查詢中完成 - 如果可能的話?
我從MySQL獲取待辦事項標題和截止日期的數組。我想按日期排列,最早的排在最前面。但是有一些沒有日期的待辦事項。這些todos我不想在第一個位置顯示,而是在我的列表底部顯示。不幸的是,MySQL首先放空了。PHP,MYSQL:按日期排序,但空的日期最後不是第一個
有沒有什麼辦法可以做到這一點在一個查詢(不能使用MySQLi,使用CI的ActiveRecord)。我可以對沒有日期的所有待辦事項運行第二個查詢,並將它們放在底部。但是我想在一個查詢中完成 - 如果可能的話?
你可以在MySQL中使用ORDER BY
子句。首先排序NULL
,然後是日期。
SELECT * FROM your_table ORDER BY (date_column IS NULL), date_column ASC
注:這是假定沒有日期行是NULL
。
是
SELECT *
FROM table
ORDER BY CASE your_date
WHEN '' THEN 'b'
ELSE 'a'
END,
date ASC
可能在ORDER BY子句中添加NVL(thedate, to_date('2099-12-31','yyyy-mm-dd'))
您可以使用此:
select * from my_table
order by if(isnull(my_field),1,0),my_field;
那麼,作爲一個純粹的MySQL的答案,我可能會做喜歡這個。
select todo.title, todo.due_date
from todo
order by ifnull(todo.due_date, '9999-12-31')
酷:-)工作正常!我必須將空的變成NULL而不是0000-00-00,但這正是我所需要的。 – suntrop 2011-12-15 18:30:09
好。是的,`NULL`是沒有日期的行比`0000-00-00`更好的表示。 – 2011-12-15 18:39:42
DUDE我愛你! (是的,這解決了我的問題)。 – 2013-12-11 07:38:40