使用laravel使用2列查询排序

时间:2018-05-22 05:58:02

标签: php mysql laravel-5

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

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

我想要的是以这样的方式对它们进行排序:具有lawyer角色的用户位于列表顶部,然后是1login_status的用户1}}列。

我使用orderBy('login_status','desc')作为login_status列,但我很难处理role列的条件。

预期产出:

- john
- erik
- mark
- david

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

2 个答案:

答案 0 :(得分:0)

您可以使用UNION

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

答案 1 :(得分:0)

您可以为您使用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

Demo

或者您可以使订单条款更短,如

order by role ='lawyer' DESC, login_status DESC

Demo