我已经在这个问题上讨论了好几个小时了。我想我不妨把它放在这里,这样你们就可以帮助我。
我正在尝试根据学生在考试中的分数总和来显示他们的位置/排名。
经过多次 StackOverflow 搜索,我找到了一个适合我的需求,因为我想要一个密集的排名。
这是我的查询
SELECT `student_id`,rank,total_score
FROM (SELECT *,IF(@marks=(@marks:=total_score),@auto,@auto:=@auto+1) AS rank
FROM (SELECT * FROM
(SELECT `student_id`,SUM(`h_tot_score`) AS total_score,`class_id`,`section_id`
FROM hscores_primary,(SELECT @auto:=0,@marks:=0) as init WHERE `class_id`= ? and `section_id`= ? and `session_id`= ? and `student_id`= ?
GROUP BY `student_id` ) sub ORDER BY total_score DESC)t) as result
我的输出是:
student_id rank total_score
105 1 1126
3912 2 1103
3913 3 1081
11 3 1081
48 4 1041
33 5 1039
所以,现在的问题是在我看来显示排名。 这个查询对我来说很奇怪,我绝对知道我做得不对。
首先,这是我在模型中放置查询的方式
public function getclassposition($student_id,$session_id,$section_id,$class_id)
{
$data = $this->db
->query("SELECT `student_id`,@marks:=0) as init WHERE `class_id`= ? and `section_id`= ? and `session_id`= ? and `student_id`= ?
GROUP BY `student_id` ) sub ORDER BY total_score DESC)t) as result")
->row();
}
然后我将它传递给控制器
public function getclassposition($student_id,$class_id)
{
$data = $this->hprimary_model->getclassposition($student_id,$class_id);
return $data;
}
然后是我的观点
Position : <?php echo $CI->getclassposition($value->student_id,$value->session_id,$value->section_id,$value->class_id); ?>
一切都搞砸了,但我真的不知道我在做什么。
我想要一个结果,而不是一个数组。
请帮忙。