一、问题描述:
users数据表有两个字段 创建时间 created_at 真实姓名 real_name
现在展示users的list需要的排序方式为 有real_name的排后面,没有的排前面;而且两部分都按created_at desc 排序
id created_at real_name
1 2016-01 40
2 2016-02 null
3 2016-03 20
4 2016-04 null
5 2016-05 30
6 2016-06 null
期望排序为
id created_at real_name
6 2016-06 null
4 2016-04 null
2 2016-02 null
5 2016-05 30
3 2016-03 20
1 2016-01 40
如果只用 ->orderBy('real_name','asc')->orderBy('created_at','desc')结果为
id created_at real_name
6 2016-06 null
4 2016-04 null
2 2016-02 null
1 2016-01 40
5 2016-05 30
3 2016-03 20
因为real_name不同 所以有real_name的created_at排序没有生效
二、解决办法:
->orderBy(\DB::raw('ISNULL(real_name)'),'desc')->orderBy('created_at','desc')
使用sql判断real_name是否为空,如果为空就是1,不为空就是0;这样real_name就只有1和0,是0 的排后面(因为0代表real_name不为空),是1的排前面。
相当于:
id created_at real_name
6 2016-06 1
4 2016-04 1
2 2016-02 1
5 2016-05 0
3 2016-03 0
1 2016-01 0
结束。