【问题标题】:Getting most recent and distinct values from database with Laravel使用 Laravel 从数据库中获取最新和不同的值
【发布时间】:2020-04-06 18:06:58
【问题描述】:

社区新人,向所有贡献者表示感谢!

现在我需要一个解决方案来从表中获取最新和不同的值。

我拥有的表名为“transactions”,其中包含'id'、'value'、'remarks'、'memberId(FK)'、'created_at' .

ID | amount |  memberId | created_at
 1 |  101   |  00001    | 22-04-2018
 2 |  102   |  00002    | 22-04-2018
 3 |  103   |  00002    | 22-04-2018
 4 |  104   |  00001    | 24-04-2018 (latest)
 5 |  105   |  00002    | 25-04-2018 (latest)
 6 |  106   |  00003    | 25-04-2018 (latest)

我的预期结果是

ID | amount |  memberId | created_at
 4 |  104   |  00001    | 24-04-2018
 5 |  105   |  00002    | 25-04-2018
 6 |  106   |  00003    | 25-04-2018

我的代码

      $transactions = Transaction::select('id', 'memberId', 'amount', DB::raw('max(created_at) as latest_depo'), 'created_at', 'amount')
   ->groupBy('memberId')
   ->orderBy('latest_depo' , 'desc')
   ->paginate(50);

但我最终没有得到每个成员的最新行。我的猜测与值的分组有关。提前致谢!

【问题讨论】:

    标签: php laravel distinct


    【解决方案1】:

    怎么样:

    $transactions = Transaction::latest()
        ->groupBy('memberId')
        ->distinct('memberId')
        ->select('id','amount','memberId','created_at')
        ->paginate(50);
    

    编辑:我在上面的查询中添加了groupBy()。如果 groupBy() 给你一个错误,验证你的数据库配置as described here


    注意:如果你使用 Laravel Eloquent 关系,你的memberId 列应该命名为member_id

    【讨论】:

    • 谢谢,但这仍然给了我多行数据,我尝试添加 groupBy('memberId'),它根据他们的 memberId 而不是最新的 'created_at' 对它们进行分组。
    • @jonathansebastian 我已经编辑了我的答案并将groupBy('member_id') 添加到查询中。
    猜你喜欢
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    • 2014-06-05
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多