我希望我的查询返回表中的行,其中一列首先包含特定的值,然后按特定的创建日期排序。
如果我有一个类似以下示例的表格:
- 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的行,然后返回CreatedDateDesc。但行包含位置2 CreatedDateDesc。
我已经在laravel上使用了这个查询
Position::orderBy(DB::raw('FIELD('1', '2')'),asc)->orderBy('created_at',desc)->paginate(29);
但它只返回所有位置1,2,并在desc处创建,我希望位置=1在asc处创建,然后位置=2在desc处创建。这是否可以只使用一个查询?
谢谢
---------------------------------------------------------更新----------------------------------------------------------------
$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();
这很好,但我需要“-
下面的查询将帮助您
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