我希望我的查询返回表中的行,其中列首先包含特定值,然后按特定的创建日期排序。
如果我有一个类似这个例子的表:
- Table: Position
- id - position_value - created_at
- 1 1 2014-07-3
- 2 1 2014-07-3
- 3 1 2014-07-4
- 4 2 2014-07-4
- 5 2 2014-07-5
- 6 2 2014-07-5
使用该表我想查询返回包含位置1的行,然后创建日期desc。但是行包含位置2创建的日期升序。
我已在laravel上使用此查询
Position::orderBy(DB::raw('FIELD('1', '2')'),asc)->orderBy('created_at',desc)->paginate(29);
但它只返回所有位置1,2和created_at desc,我想要position = 1 created_at asc然后position = 2 created_at desc。这可以只使用一个查询吗?
感谢
----------------------------------------------- ---------- UPDATE --------------------------------------- -------------------------
$position = Position::orderBy(DB::raw('(CASE WHEN position_value = 1 THEN created_at END asc, CASE WHEN position_value = 2 THEN created_at END desc)'))->get();
这很好用,但我需要“ - > paginate(29)”和“Field(1,2)”,有人可以更新答案吗?感谢
答案 0 :(得分:0)
以下查询将为您提供帮助
SELECT * FROM Position ORDER BY
CASE WHEN position_value = 1 THEN created_at END ASC,
CASE WHEN position_value = 2 THEN created_at END DESC