使用laravel使用2列按查询排序

ioekq8ef  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(244)

以下是我的数据库结构示例:

id |    name    |   role   |   login_status   |
-----------------------------------------------
 1      mark        user           1
 2      john       lawyer          0
 3      david       user           0
 4      erik       lawyer          0

我想要的是以这样一种方式订购它们,即 lawyer 角色将位于列表的顶部,后跟值为的用户 1login_status 列。
我曾经 orderBy('login_status','desc') 对于登录状态列,但我对 role 列。
预期产量:

- john
- erik
- mark
- david

任何帮助都将不胜感激。谢谢。

13z8s7eq

13z8s7eq1#

你需要一个 case 表达你的标准

->orderByRaw("CASE WHEN role ='lawyer' THEN 1 ELSE 0 END DESC")
->orderBy( 'login_status', 'DESC' );

纯sql就像

select *
from demo
order by CASE WHEN role ='lawyer' THEN 1 ELSE 0 END DESC, login_status DESC

演示
或者你可以把订货条款缩短一些,比如

order by role ='lawyer' DESC, login_status DESC

演示

ds97pgxw

ds97pgxw2#

你可以使用union

select * from table where role='lawyer' order by login_status desc
UNION
select * from table where role!='lawyer' order by login_status desc

相关问题