1

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

在许多情况下,我使用以下 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 future

但用户想要优先考虑 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
4

2 回答 2

4

使用 coalesce将有效值设置为 Null 优先级行:

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

已编辑

重新阅读您的问题,我发现正确的顺序是 DESC 而不是 ASC:

   coalesce(priority,0) DESC ,

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

请记住,当您创建这个新字段时,您可以为其设置一个默认值,这将避免coalesceunion

data_type [NOT NULL | NULL] [DEFAULT default_value]
于 2012-09-20T07:09:57.817 回答
0
SELECT * 
FROM table 
ORDER BY 
   if(priority IS NULL,'0',priority) ASC ,
   insertDate DESC;
于 2012-09-20T07:14:26.160 回答