按日期和优先级排序的mysql

时间:2012-09-20 07:04:54

标签: mysql sql-order-by

我有一个网页,其中有一个表格中有新闻数据。

在许多情况下,我使用以下SQL:

SELECT * FROM table ORDER BY insertDate DESC

订购。

ID|priority|insertDate
1 |NULL    |2012-09-16
2 |NULL    |2012-09-17
3 |NULL    |2012-09-18
5 |NULL    |2012-09-19
5 |NULL    |2012-09-20
4 |1       |2010-05-10 - this is way back in the futurer

但是用户想要优先处理1条新闻。如果我使用

 SELECT * FROM table ORDER BY priority ASC ,insertDate DESC

它无法正常工作,我如何使用ORDER获取结果

ID|priority|insertDate
4 |1       |2010-05-10
1 |NULL    |2012-09-16
2 |NULL    |2012-09-17
3 |NULL    |2012-09-18
5 |NULL    |2012-09-19
5 |NULL    |2012-09-20

2 个答案:

答案 0 :(得分:4)

Use coalesce将有效值设置为空优先级行:

SELECT * 
FROM table 
ORDER BY 
   coalesce(priority,0) ASC ,
   insertDate DESC

<强>被修改

重新阅读你的问题我看到正确的顺序是DESC而不是ASC:

   coalesce(priority,0) DESC ,

另外,请注意@yshavit评论。为了提高性能,您可以将查询拆分为两个,先选择一个非空值。

请注意,与您can set to it a default value创建此新字段时相比,这将避免coalesceunion

data_type [NOT NULL | NULL] [DEFAULT default_value]

答案 1 :(得分:0)

SELECT * 
FROM table 
ORDER BY 
   if(priority IS NULL,'0',priority) ASC ,
   insertDate DESC;