php - MySQL JOIN 和 LIMIT TO 1

标签 php mysql laravel

几乎完美的代码...但是它从 actions_logs 表中获取重复项,因为每个用户都有多个用于历史记录的登录条目。

我已经测试了很多选项,但网络上没有有效的示例。

sequelpro with current result


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 代码的结果:

laravel code

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/

相关文章:

mysql - Laravel - 违反完整性约束 : 1452 Cannot add or update a child row

Laravel Nova - 基于父选择字段显示/隐藏表单字段

php - 在 laravel 中创建带有额外列的数据透视迁移

php - 如何使用 PHP 中的 SpreadsheetReader 读取 Excel 电子表格的每一行?

javascript - 判断checkbox是否有变化

php - 在两个日期之间更新 MYSQL 数据库

PHP: PDO(MySQL) SSL 连接

php - 智能图像裁剪

php - 连接两张表的sql语句

php - Laravel:转换 SQL 查询,0 个结果