PHP,MYSQL:按日期排序,但空日期排在最后而不是最前面

12
我从MySQL中获取了一个包含待办事项标题和截止日期的数组。我想按日期排序,并将最旧的置于顶部。但是有一些待办事项没有日期。这些待办事项我不想显示在前几个位置,而是想显示在列表底部。不幸的是,MySQL会将空值排在最前面。
是否有一种方法可以在一个查询中完成(不能使用MySQLi,要使用CI的ActiveRecord)?我可以运行第二个查询来查找所有没有日期的待办事项并将它们放在底部。但是我希望尽可能只用一个查询来完成。
5个回答

38

你可以使用MySQL的ORDER BY子句来实现。首先按NULL排序,然后再按日期排序。

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

Note: This assumes rows without a date are NULL.


注意:此假设认为没有日期的行是NULL

很酷 :-) 运行良好!我必须将空的更改为NULL,而不是0000-00-00,但这正是我所需要的。 - suntrop
1
好的。是的,NULL0000-00-00更好地表示了没有日期的行。 - Jason McCreary

1

是的

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;

为什么要同时使用 isnull()if() - Jason McCreary

-1

好的,作为一个纯MySQL的答案,我可能会这样做。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接