首页 > 解决方案 > 根据总分获取单个学生的排名(位置)

问题描述

我想根据所有科目的总分显示单个学生的“排名”或“位置”。

例如,如果一个学生的总分最高为 99,它应该返回排名第一。另一个 92 的学生应该返回第二名。如果两个学生的分数相同为 90,他们应该返回第三名。

我不希望他们在一张桌子上,只是一个显示器。

这是我的查询模型:

 public function GetClassPosition($student_id, $session_id, $section_id, $class_id) 
    {
        $this->db->order_by('tot_score', 'DESC');
        $this->db->select_sum('tot_score');
        $this->db->where('student_id', $subject_id);
        $this->db->where('session_id', $session_id);
        $this->db->where('section_id', $section_id);
        $this->db->where('class_id', $class_id);
        $data = $this->db->get('scores_primary'); 
    }

控制器:

 public function GetClassPosition($student_id, $session_id, $section_id, $class_id)
    {
  $data = $this->primary_model->GetClassPosition($student_id, $session_id, $section_id, $class_id); 
        return $data->tot_score;
    }

序数:

 function mtordinal($number) 
      {
        $ends = array('TH','ST','ND','RD','TH','TH','TH','TH','TH','TH');
        if ((($number % 100) >= 11) && (($number%100) <= 13))
            return $number. 'th';
        else
            return $number. $ends[$number % 10];
    }

显示它

看法:

 <?php
$scores2 = $CI->GetClassPosition($value->$student_id, $value->session_id, $value->section_id, $value->class_id); 
$scores = array_column($scores2, 'tot_score');
$pos = array_search($value->tot_score, $scores);
$number = $pos + 1;
echo $CI->ordinal($number);
?>

显然,这会以列表形式显示结果。如何仅显示每个学生的职位?

标签: phpmysqlcodeigniter

解决方案


推荐阅读