Laravel雄辩 - 选择MAX与其他列
问题描述:
我想要选择与MAX一样的列数。原始查询将如下所示:SELECT users.id, ..., MAX(ur.rank) AS rank
但我无法弄清楚如何使用Laravel提供的查询生成器在Eloquent中执行此操作。Laravel雄辩 - 选择MAX与其他列
这是我的尝试:
$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中的*别,其中的users_ranks.uid = users.id。
有人告诉我,当处理大型结果集时避免使用子查询,它可以显着减慢速度。
任何人都可以指向正确的方向吗?谢谢。
答
我想你应该重写它是这样的:
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::
。
查询构建器是否允许您沿'SELECT MAX(等级)FROM users_ranks WHERE uid = 7'行创建某些内容?只要做两个查询? – Luke