提问者:小点点

如果不是,如何返回具有特定值的行?


我希望我的查询返回表中的行,其中一列首先包含特定的值,然后按特定的创建日期排序。

如果我有一个类似以下示例的表格:

      - 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();

这很好,但我需要“-


共1个答案

匿名用户

下面的查询将帮助您

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