MySQL按指定字段的某个指定值排序,其他值自然排序 | 您所在的位置:网站首页 › mysql按照指定顺序排序怎么操作 › MySQL按指定字段的某个指定值排序,其他值自然排序 |
简介:今日项目需求产品增加了一个需求,要求审核状态字段按照未审核优先展示,再按照创建时间倒序展示。 一、建立测试消息表并插入测试数据10条 create table message( id int auto_increment primary key not null, audit_status tinyint(2) comment '1:未审核,2:审核通过,3:审核失败', msg_content varchar(50) comment '消息内容', create_time datetime comment '创建时间', update_time datetime comment '更新时间' )comment '消息表' insert into message(audit_status,msg_content,create_time,update_time) values(3,'A',now(),null); insert into message(audit_status,msg_content,create_time,update_time) values(2,'B',now(),null); insert into message(audit_status,msg_content,create_time,update_time) values(1,'你好',now(),null); insert into message(audit_status,msg_content,create_time,update_time) values(3,'C',now(),null); insert into message(audit_status,msg_content,create_time,update_time) values(2,'D',now(),null); insert into message(audit_status,msg_content,create_time,update_time) values(3,'E',now(),null); insert into message(audit_status,msg_content,create_time,update_time) values(3,'F',now(),null); insert into message(audit_status,msg_content,create_time,update_time) values(2,'G',now(),null); insert into message(audit_status,msg_content,create_time,update_time) values(1,'我好',now(),null); insert into message(audit_status,msg_content,create_time,update_time) values(1,'都好',now(),null);注意:数据插入的时候,一条一条插入,不要全选一起执行,否则创建时间都是一样的,按照创建时间倒序就测试不了了 二、需求分析 分析:先按照要求,审核状态字段按照未审核优先展示,期望的输出结果是 【你好,我好,都好,A,B,C,D,E,F,G】这种顺序 分析:按照 order by audit_status 一定不能实现,因为要么升序,要么降序。 可需求是要 ”未审核“状态的优先展示,其他状态的自然排序,也就是 audit_status=1 的优先展示,audit_status=2和3 的自然展示。 这里需要用到一个函数: FIELD(s,s1,s2...)示意:该函数是返回字符串s在s1,s2...等字符串当中的位置。等同于我们找到目标数值,在按照指定顺序排序即可 三、编写SQL SQL如下: select * from message order by field(audit_status,1,audit_status) asc结果: 排序正确。 上面SQL等同于这条SQL: select * from test order by field(status,1)desc在加上按照create_time倒序,期望的输出结果是 【都好,我好,你好,G,F,E,D,C,B,A】这种顺序 排序正确,需求完成。 |
CopyRight 2018-2019 实验室设备网 版权所有 |