Laravel雄辩 - 选择MAX与其他列

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。

有人告诉我,当处理大型结果集时避免使用子查询,它可以显着减慢速度。

任何人都可以指向正确的方向吗?谢谢。

+0

查询构建器是否允许您沿'SELECT MAX(等级)FROM users_ranks WHERE uid = 7'行创建某些内容?只要做两个查询? – Luke

我想你应该重写它是这样的:

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::