MySQL特殊ORDER BY实现:未发布文章优先 已发按日期降序
MySQL实现指定文章排序规则的SQL写法
基础信息
现有表结构:
posts(id_post, title, post_date)
字段规则:
- 未发布文章:
post_date字段值为NULL - 已发布文章:
post_date字段存储对应发布日期
排序需求:
- 第一优先级:所有未发布文章排在列表最前部
- 已发布文章:按照发布日期倒序(最新发布的在前)排列
实现SQL
直接用布尔表达式作为排序条件即可,写法最简洁:
SELECT id_post, title, post_date FROM posts ORDER BY post_date IS NULL DESC, post_date DESC;
逻辑说明
MySQL中布尔表达式的返回值为1(条件成立)、0(条件不成立):
- 未发布文章匹配
post_date IS NULL条件,返回1,倒序排列时1排在0前面,自然落在列表最前 - 已发布文章不匹配该条件,返回0,排在未发布文章之后,再通过第二个排序规则
post_date DESC实现新发布文章在前的效果
如果习惯用权重标记的写法,也可以用IF函数实现,最终排序结果完全一致:
SELECT id_post, title, post_date FROM posts ORDER BY IF(post_date IS NULL, 0, 1) ASC, post_date DESC;
内容的提问来源于stack exchange,提问作者vincent
相关产品推荐
相关产品推荐

