我有2张桌子:
user: id, name
score: id, user_id, point
现在,我想获得5个得分最高的用户名称,但看起来好像是错误的。
这是我的代码:
public function getTop(){
$top = DB::table('score')
->select('user_id', DB::raw('COUNT(point)'))
->groupBy('user_id')
->orderBy(DB::raw('COUNT(point)'), 'DESC')
->take(5)
->get();
return view('home',compact('top'));
}
答案 0 :(得分:1)
在您的情况下,数据库查询更有意义。
使用该结果加入用户表。
$topResult = DB::table('users'
)->join(DB::raw('(SELECT user_id, SUM(point) as score FROM score GROUP BY user_id ORDER BY SUM(point) LIMIT 5) as top_scorer'), function($join) {
$join->on('top_scorer.user_id', '=','users.id');
})
->select(['users.*', 'top_scorer.score']) //Select fields you need.
->orderBy('top_scorer.score')
->get();
答案 1 :(得分:1)
尝试一下。
DB::table('users')
->select(['users.id', DB::raw('MAX(sc.point) AS score')])
->join('score AS sc', 'sc.id', '=', 'users.id')
->groupBy('users.id')
->take(5)->get();