php - 如何GroupBy上组的最新记录

标签 php mysql laravel laravel-5

我将使用什么 laravel 查询来 groupBy('author_id') 但最新的结果。现在,我尝试的所有操作都会得出第一个结果。我试过使用 MAX(id) 作为 id sql 函数,但没有成功

它找到记录没问题,只是找到组中的第一条记录

这是我正在使用的模型查询:

public function lastMessages() {
     return $this->hasMany('App\Message', 'recipient_id')->groupBy('author_id')->orderBy('created_at', 'DESC');
}

我也试过:

public function lastMessages() {
     return $this->hasMany('App\Message', 'recipient_id')
         ->select(DB::raw('*, max(id) as id))
         ->groupBy('author_id')
         ->orderBy('id', 'desc');
}

我也试过这个,但没有成功:

public function lastMessages() {
     return $this->hasMany('App\Message', 'recipient_id')
         ->select(DB::raw('*, max(created_at) as created_at))
         ->groupBy('author_id')
         ->orderBy('created_at', 'desc');
}

以上所有将返回组 author_id 的第一行。我希望返回每组的最后一行或最新行。我也试过 ->latest() 但没有骰子!

在此先感谢您的帮助。

我的表:

编号 项目编号 作者编号 收件人编号 信息 创建时间 更新时间

最佳答案

创建一个以这种方式获取每个作者最新消息 ID 的子查询连接将不再需要,因为您已经在连接子查询中获取每个作者最新消息 ID

不再需要 max(created),因为您已经在每个组中获取最新创建的消息

public function lastMessages() {
    return $this->hasMany('App\Message', 'recipient_id')
         ->select('*')
         ->join(DB::raw('(Select max(id) as id from messages group by author_id) LatestMessage'), function($join) {
            $join->on('messages.id', '=', 'LatestMessage.id');
            })
         ->orderBy('created_at', 'desc');
}

Screen Shot

关于php - 如何GroupBy上组的最新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40392258/

相关文章:

PHP 依赖注入(inject) - fatal error

php - 创建 MySQL 排行榜

php - 使用 php mysql 和 ajax 刷新 Div 中特定单元格中的数据

MySQL ORDER BY CASE/IF 相关问题

mysql - 在 MySQL 中使用 DATE_ADD 后选择列值的日期

node.js - 将 # 作为密码存储在 .env 文件中

php - 如何从 Stacey App 中的逗号分隔列表值创建链接标签?

mysql - React with Rails - 在服务器日志中回滚

php - 将 Setter 和 Getter 添加到 Laravel 模型

php - 检查 Laravel 中是否单击了按钮 type=submit name=submit