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
创建一个子查询连接,以这种方式获取每个作者的最新消息 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)
| 归档时间: |
|
| 查看次数: |
5569 次 |
| 最近记录: |