在Laravel中获得最高分

时间:2019-04-22 17:29:07

标签: mysql laravel

我有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'));
    }

2 个答案:

答案 0 :(得分:1)

在您的情况下,数据库查询更有意义。

  1. 数据库查询以获取总得分最高的5个user_id。
  2. 使用该结果加入用户表。

    $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();