You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 15:03:10