PHP代码中的错误

时间:2015-12-06 11:43:07

标签: php codeigniter

我在学生门户网站上工作,下面是我用于学生位置的代码,但每个用户都保持第一的位置。当他们从正面视图检查他们的结果时,每个学生似乎都有第一个位置。似乎无法找出代码中的问题来源

 function get_position($student, $class, $session, $term){                                                                                                                      

    $this->db->select('*');
    $this->db->from('result');
    $this->db->where(array( 'class_id'=>$class, 'Session'=>$session, 'Term'=>$term));
    $this->db->order_by('Total', 'asc');
    $other_results = $this->db->get()->result_array();

    $this->db->select("*");
    $this->db->from('result');
    $this->db->where(array('class_id'=> $class, 'Session'=>$session, 'Term'=>$term, 'StudentID'=>$student ));
    $student_result = $this->db->get()->result_array();

    $student_total = $this->get_student_total($student_result);

    $position =1;
    foreach($other_results as $res){

        if($student_total < $res['Total']){

            $position++;
        }
    }

    return $position;



}


function get_student_total($result){

    $total = 0;

    foreach($result as $res){

        $total+= $res['Total'];
    }

    return $total;
}

}

&GT;

1 个答案:

答案 0 :(得分:0)

我假设结果表可能有给定studentID的许多记录。在学期内每个学生的几个考试成绩(总计)对吗?

这应该可以解决问题

  public function get_position($student, $class, $session, $term)
  {
    //I like to use db method chaining. 
    $ranking = $this->db->select('StudentID')
        ->select_sum('Total', 'sumScore')
        ->from('result')
        ->where(array('class_id' => $class, 'Session' => $session, 'Term' => $term))
        ->group_by('StudentID')
        ->order_by('sumScore', 'desc')
        ->get()->result_array();
    //The code above retrieves results from a query statement that looks like this:
    //SELECT `StudentID`, SUM(`Total`) as sumScore 
    //FROM `result` where `class_id` = $class and `Session` = $session and `Term` = $term 
    //GROUP BY `StudentID` 
    //order by `sumScore` desc

    $position = 1;
    foreach($ranking as $rank)
    {
      if($rank['StudentID'] !== $student)
      {
        ++$position;
      }
      else
      {
        return $position;
      }
    }
    return NULL; //to indicate studentID was not found
  }