【问题标题】:Laravel Eloquent - Select MAX with other columnsLaravel Eloquent - 选择 MAX 与其他列
【发布时间】:2015-10-08 17:12:33
【问题描述】:

我正在尝试选择一些列以及 MAX。原始查询类似于:SELECT users.id, ..., MAX(ur.rank) AS rank 但我无法弄清楚如何使用 Laravel 在 Eloquent 中提供的查询构建器来完成它。

这是我的尝试:

$user = User::join('users_ranks AS ur', function($join) {
    $join ->on('ur.uid', '=', 'users.id');
})
->where('users.id', '=', 7)
->groupBy('users.id')
->first(['users.id', 'users.username', 'MAX(ur.rank) AS rank']);

我根本想不通。我想要实现的是我正在选择 users.id = 7 的用户,并且我想选择 users_ranks 中的 MAX 等级,他们的 users_ranks.uid = users.id。

有人告诉我要避免子查询,因为在处理大型结果集时,它会显着减慢速度。

谁能指出我正确的方向?谢谢。

【问题讨论】:

  • 查询生成器是否允许您创建类似于SELECT MAX(rank) FROM users_ranks WHERE uid = 7 的内容?只做两个查询?

标签: php mysql laravel eloquent


【解决方案1】:

我认为你应该这样重写它:

DB::table('users')
    ->select(['users.id', 'users.username', DB::raw('MAX(ur.rank) AS rank')])
    ->leftJoin('users_ranks AS ur', 'ur.uid', '=', 'users.id')
    ->where('users.id', '=', 7)
    ->groupBy('users.id')
    ->first();

如果您稍后使用表名并且不想获取所有字段 ('users.id', 'users.username'),则使用 User:: 毫无意义。

【讨论】:

    猜你喜欢
    • 2023-03-17
    • 2021-12-21
    • 2018-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-23
    • 2013-06-10
    • 1970-01-01
    相关资源
    最近更新 更多