几乎完美的代码...但是它从 actions_logs 表中获取重复项,因为每个用户都有多个用于历史记录的登录条目。
我已经测试了很多选项,但网络上没有有效的示例。
select `users`.* from `users` left join `action_logs` on `action_logs`.`user_id` = `users`.`id` and `action_logs`.`type` = 'login' order by `action_logs`.`created_at` desc, `id` desc
预期结果将是按登录日期排序的完整用户列表。
该 sql 是 Laravel 代码的结果:
if($value == 'last_login') {
return $this->builder->select('users.*')
->leftJoin('action_logs', function ($join) {
$join->on('action_logs.user_id', '=', 'users.id')
->where('action_logs.type', '=', 'login');
})->orderBy('action_logs.created_at', $this->request->get('sort'))
->orderBy('id', $this->request->get('sort'));
}
最佳答案
您应该使用 DISTINCT 查询,但为了删除重复结果,您应该删除选择中的“created_at”,因为每个登录都是在不同时间创建的。
关于php - MySQL JOIN 和 LIMIT TO 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54227409/