我有一个网页,其中有一个表格中有新闻数据。
在许多情况下,我使用以下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
答案 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创建此新字段时相比,这将避免coalesce
和union
:
data_type [NOT NULL | NULL] [DEFAULT default_value]
答案 1 :(得分:0)
SELECT *
FROM table
ORDER BY
if(priority IS NULL,'0',priority) ASC ,
insertDate DESC;