【问题标题】:groupby in descending order in laravel在laravel中按降序排列
【发布时间】:2021-07-11 19:48:51
【问题描述】:

在 laravel 中使用 group by 和 order by 时,我没有得到我想要的输出 这是我的代码

 $old=DB::table('tbl1')
      ->leftJoin('tbl2','tbl1.id','=','tbl2.tbl1_id')
      ->whereDate('tbl2.created_at','<' ,Carbon::today())
      ->where('tbl1.users_id',$id)
      ->select('tbl2.name as name','tbl1.teacher as teacher','table2.class_id as class_id')
      ->orderBy('tbl2.created_at','desc')
      ->groupBy('tbl2.class_id')
      ->get()
      ->toArray();

通过正常工作进行分组,但它没有返回我只想根据创建时间获取 class_id 的最新值的最新值

【问题讨论】:

  • 编辑config/database.php。在 mysql 数组中,设置为 strict =&gt; false
  • 你没有理解我的问题。实际上我得到了基于 groupby() 的结果,但没有得到最新的结果
  • 你需要做一个子查询吗?
  • @RoëlGonzalez 你能详细说明一下,在这种情况下我如何创建子查询?
  • 你能运行 -&gt;toSql 而不是 -&gt;get() 并显示结果查询是什么吗?

标签: mysql laravel group-by


【解决方案1】:

您可以尝试 Group By ,然后按顺序订购。

【讨论】:

    【解决方案2】:

    使用 first() 而不是 get()。它只会占用最新值的第一行。我假设您的其余查询是正确的

    $old=DB::table('tbl1')
          ->leftJoin('tbl2','tbl1.id','=','tbl2.tbl1_id')
          ->whereDate('tbl2.created_at','<' ,Carbon::today())
          ->where('tbl1.users_id',$id)
          ->select('tbl2.name as name','tbl1.teacher as teacher','table2.class_id as class_id')
          ->orderBy('tbl2.created_at','desc')
          ->groupBy('tbl2.class_id')
          ->first()
          ->toArray();
    

    【讨论】:

    • 先返回我一行,但我需要多行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    • 2018-03-18
    • 2012-10-18
    • 2012-09-30
    • 2012-03-06
    相关资源
    最近更新 更多