数据列表同时按两个字段排序

一、问题描述:

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

结束。

你可能感兴趣的:(数据列表同时按两个字段排序)