1. 基础操作
mysql单个字段降序排序:
select * from table order by `id` desc;
mysql单个字段升序排序:
select * from table order by `id` asc;
mysql多个字段排序:
select * from table order by `id` desc, `name` desc;
多字字段排序只需要添加多个排序条件,并且每个排序的条件之前用逗号分开。
order by `id` desc, `name` desc;
表示先按照id降序排序;如果id相同,按照name降序排序。
同理:
order by `id` desc, `name` asc;
表示先按照id降序排序;如果id相同,按照name升序排序。
2. 复杂排序
2.1 按照状态排序
要求按照以下顺序排序
审核中->审核拒绝->待放款->放款失败->待还款->已结清->已逾期
{
id:80,
label:'审核中'
},{
id:100,
label:'审核拒绝'
},{
id:90,
label:'待放款'
},{
id:170,
label:'放款失败'
}
,{
id:175,
label:'待还款'
}
,{
id:200,
label:'已结清'
}
,{
id:180,
label:'已逾期'
}
实现:
order by (CASE
WHEN `status` = 80 THEN 0
WHEN `status` = 100 THEN 1
WHEN `status` = 90 THEN 2
WHEN `status` = 170 THEN 3
WHEN `status` = 175 THEN 4
WHEN `status` = 200 THEN 5
WHEN `status` = 180 THEN 6
ELSE 7 END) ASC
2.2 根据不同状态实现不同排序方式
活动列表,排序要做如下修改:
- 首先根据活动状态排序;进行中 => 未开始 => 已结束来排
- 进行中,未开始的活动,要按“开始时间”的顺序来排
- 已经结束的活动,要按“结束时间”的倒序来排
{
id:1,
label:'未开始'
},{
id:2,
label:'进行中'
},{
id:3,
label:'已结束'
}
实现
order by
-- 先对进行中的状态进行替换,然后按顺序排
(CASE
WHEN `status` = 2 THEN 0
WHEN `status` = 1 THEN 1
WHEN `status` = 3 THEN 2
END) ASC,
-- 然后对相应状态进行不同的排序处理
CASE WHEN `status` = 1 or `status` = 2 THEN `create_time` END ASC
CASE WHEN `status` = 3 THEN `modify_time` END DESC,