MySQL 某个字段排序,按照指定值的顺序

更新日期: 2023-06-21 阅读次数: 959 字数: 292 分类: MySQL

没想到这么多年还是要继续写微信小程序会员卡开卡、扣卡这种逻辑,又是脑子炸裂的一天。

排序需求

会员卡使用状态字段,在数据库中的对应值如下

Status int  // 卡状态。0 待使用; 1 已使用; 2 使用完; 3 已退卡; 4 退卡中

如果想按照如下顺序排序:

  1. 待使用
  2. 已使用
  3. 退卡中
  4. 使用完
  5. 已退卡

那么就不能直接使用 order by status asc 这种的方式。

指定值排序

解决方法是使用

SELECT * FROM user_card
ORDER BY FIELD(status, 0, 1, 4, 2, 3)

注意: 如果字段包含的值不在指定的值列表中,则该字段的值将被视为 NULL,并放在排序结果的最后。

golang gorm

对应的 gorm 使用方式为

db.Order("FIELD(column, 0, 1, 4, 2, 3)").Find(&result)

贴心的 AI

我在 poe Sage 中问的这个问题,没想到 Sage 不但回答了 Mysql 的用法,还直接给出了 golang Gorm 的用法。

看来我这个号算是练成了。。。

MySQL Field 排序

关于作者 🌱

我是来自山东烟台的一名开发者,有敢兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式