【问题标题】:Get latest data of a specific column using eloquent使用 eloquent 获取特定列的最新数据
【发布时间】:2021-04-12 03:09:15
【问题描述】:

如何获取每个特定 user_id 的最新/最新数据。

提交表格

id user_id status created_at updated_at
1 3 redo somedatetime somedatetime => dont want this
2 3 redo somedatetime somedatetime
3 4 redo somedatetime somedatetime
4 5 redo somedatetime somedatetime

ID 2 不是冗余。我正在跟踪记录。我需要获取 id 2,3,4。我试过使用

Submission::where('status','redo')->distinct('user_id')->get();

但它返回所有值

更新

这里是表的真实结构供参考

如您所见,user_id 78 有 2 个重做,即 89 和 90。我正在尝试获取最新/最后一个,即 90。

【问题讨论】:

  • 试试这样的Submission::where('status','redo')->latest()->groupBy('user_id')->get();
  • @Joseph 我得到 ID 1 而不是 2
  • 能否添加结果
  • @Joseph 尝试检查我的更新。谢谢
  • 您想获取给定用户的最新记录还是所有用户的最后一条记录?

标签: laravel eloquent greatest-n-per-group


【解决方案1】:

您可以获取最后的 id,然后获取完整的记录:

 $max_ids = Submission::query()
       ->where('status','redo')

        ->select('user_id', DB::raw('max(id) max_ids'))
        ->groupBy('user_id')->pluck('max_ids');

    $lasts = Submission::whereIn('id', $max_ids)->get();

【讨论】:

    【解决方案2】:

    你可以用子查询试试这个:

    Submission::from(Submission::orderBy('id', 'desc'), 't')
        ->groupBy('user_id')
        ->get();
    

    可能需要进行调整,未经测试,但想法是子查询将获得排序,然后主查询将进行分组。

    【讨论】:

    • 您能解释一下from 方法的第二个属性中的t 字母是什么吗?我喜欢这个答案你是一个属
    猜你喜欢
    • 2013-11-20
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-05
    • 2020-11-22
    相关资源
    最近更新 更多