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 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式