Jea*_*lis 3 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)
->groupBy('users.id')
->first(['users.id', 'users.username', 'MAX(ur.rank) AS rank']);
Run Code Online (Sandbox Code Playgroud)
我根本想不出来.我想要实现的是我正在选择users.id = 7的用户,并且我想要在users_ranks中选择其users_ranks.uid = users.id的MAX排名.
我被告知要避免使用子查询,因为在使用大型结果集时,它可以大大减慢速度.
谁能指出我正确的方向?谢谢.
我想你应该像这样重写它:
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();
Run Code Online (Sandbox Code Playgroud)
没有必要使用User::,如果您以后使用表名和想不能获取所有字段('users.id', 'users.username').