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

时间:2014-07-03 13:48:47

标签: sql laravel

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

如果我有一个类似这个例子的表:

      - 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)”,有人可以更新答案吗?感谢

1 个答案:

答案 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