问题场景:
我想把未完成的任务放在表格的最前面,后面的都是已完成的,用更新时间排序。
对于任务状态只有两个,且有一定规则的还好办,直接order排序即可。但是任务结束状态有多个状态码,如:
0:未完成 1:自动完成 2:手动完成 3:放弃任务
这种场景就不好办了,因为对于结果来说,其实只有两种,未完成和完成。
解决方案:
有这么几个思路:
1、增加字段,用于区分任务完成结果,然后以这个字段排序;
2、查询时,利用case when对状态码转义,然后在排序;
3、排序时,利用case when对状态码转义再排序
我用的第三种,在laravel中的语法:
// 我的类似实现,laravel
$data = $builder->orderByRaw("( case when finish_flag=0 then 0 else 1 end )")->orderBy('updated_at','desc')
转换为mysql:
select * from `table_name` order by (case when finish_flag=0 then 0 else 1 end),updated_at desc;