点击上方蓝色字体关注公众号
问题描述:一张Mysql表中有多种状态,我想按指定的状态排序
1:"待上架"2:"预约上架"3:"出售中"4:"预约下架"5:"下架"6:"已售罄"
排序规则并不是 order by status desc 也不是 asc
而是按照 出售中 > 待上架 > 预约上架 > 预约下架 >下架 的顺序排序
CREATE TABLE `product` (`id` bigint(20) NOT NULL COMMENT '主键',`name` varchar(50) NOT NULL COMMENT 'SPU 名字',`descs` varchar(50) DEFAULT '' COMMENT '商品描述',`product_no` varchar(60) NOT NULL COMMENT '商品编号',`status` tinyint(2) NOT NULL COMMENT '状态(1.待上架 2.预约上架 3.出售中 4. 预约下架 5.下架 6.已售罄)',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',`create_by` bigint(20) NOT NULL DEFAULT '0' COMMENT '创建人(-1代表未设置 0 代表没有)',`update_by` bigint(20) NOT NULL DEFAULT '0' COMMENT '更新人'PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品表';
数据如下:

此时应当使用field函数:
select * from product_spu order by field(status,3,1,2,4,5)
输出结果:

按照后面的值正序排列,无匹配的将会放在最前面(比如6)、如果倒序排序的话,6会在最后面
文章转载自程序员舒克,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




