여기서는 단일 그룹별 또는 단일 순서에 대해 이야기하지 않지만 그룹화 및 정렬 기능을 완료하기 위해 함께 사용되는 경우가 많습니다.
$field = 'id,uid,course_id,평균 점수,ec_id,examid'; $resultSql = StuExam::where($where)->field($field)->order(['score' => 'desc'])->limit(100000)->buildSql(); $result = Db::table($resultSql . 'stu_exam') ->field( 'id,uid,course_id, avg,ec_id,examid')->order(['avg' => 'desc']) - > group('uid')->fetchSql()->select();dd($result);
SQL 문은 다음과 같습니다.
SELECT `id`,`uid`,`course_id`,`avg`,`ec_id`,`examid` FROM ( SELECT `id`,`uid`,`course_id`,score as avg,`ec_id`,`examid` FROM `edu_stu_exam` WHERE `course_id` = 45 AND `type` = 82 ORDER BY `score` DESC LIMIT 100000 )stu_exam GROUP BY `uid` ORDER BY `avg` DESC
지금까지 우리는 기능을 완료했습니다. 여러 사용자가 데이터를 여러 번 제출합니다. 각 사용자의 최대 값만 가져와 점수에 따라 역순으로 정렬합니다.
array_slice($arr,0,$num);(2차원 배열을 가로채서 표시)과 결합하면 완전한 리더보드가 준비됩니다.