【问题标题】:How do i return rows with specific value if else?否则,我如何返回具有特定值的行?
【发布时间】:2014-08-24 16:24:43
【问题描述】:

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

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

      - 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,我想要位置 = 1 created_at asc 然后位置 = 2 created_at 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();

这很好用,但我需要“->paginate(29)”和“Field(1,2)”,有人可以更新答案吗?谢谢

【问题讨论】:

    标签: sql laravel


    【解决方案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
    

    【讨论】:

    • 有人可以尝试将此查询转换为 laravel 吗?
    • 这个查询 DB::raw('FIELD('1', '2')'),asc 在你的语法中消失了,你能帮我在这些语法中插入字段吗?
    猜你喜欢
    • 2017-10-10
    • 2010-11-18
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 2022-06-23
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    相关资源
    最近更新 更多