如何按组上的最新记录分组

max*_*435 2 php mysql laravel laravel-5 laravel-5.2

我将使用什么 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');
}
Run Code Online (Sandbox Code Playgroud)

我也试过:

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

我也试过这个,但没有运气:

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');
}
Run Code Online (Sandbox Code Playgroud)

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

在此先感谢您的帮助。

我的表:

id project_id author_id 收件人_id 消息 created_at updated_at

Beg*_*ner 6

创建一个子查询连接,以这种方式获取每个作者的最新消息 ID 将不再需要 group by,因为您已经在连接子查询中获取了每个作者的最新消息 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');
}
Run Code Online (Sandbox Code Playgroud)

截屏