Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel Eloquent-与其他列一起选择MAX_Php_Mysql_Laravel_Eloquent - Fatal编程技术网

Php Laravel Eloquent-与其他列一起选择MAX

Php Laravel Eloquent-与其他列一起选择MAX,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,我正在尝试选择一些列以及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) ->

我正在尝试选择一些列以及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\u ranks.uid=users.id所在的users\u ranks中的最大排名

我被告知要避免使用子查询,因为在处理大型结果集时,它会显著降低速度


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

我想你应该这样重写:

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'
),那么使用
用户::
没有意义。

查询生成器是否允许您按照从uid=7的用户组中选择MAX(rank)的行创建内容?只做两个查询?