У меня есть таблица результатов для учеников в классе. Все тесты и результаты экзаменов по предметам собраны и записаны там.
CREATE TABLE `scores_primary` (
`id` int(20) NOT NULL,
`student_id` int(11) DEFAULT NULL,
`class_id` int(5) DEFAULT NULL,
`section_id` int(5) DEFAULT NULL,
`subject_id` int(11) DEFAULT NULL,
`session_id` int(11) DEFAULT NULL,
`ca1` int(11) DEFAULT NULL,
`ca2` int(11) DEFAULT NULL,
`ca3` int(11) DEFAULT NULL,
`ca4` int(11) DEFAULT NULL,
`ca5` float(10,1) DEFAULT NULL,
`ca6` float(10,1) DEFAULT NULL,
`project` int(11) DEFAULT NULL,
`affective` int(11) DEFAULT NULL,
`psychomotor` int(11) DEFAULT NULL,
`exam` int(11) DEFAULT NULL,
`tot_score` int(11) DEFAULT NULL,
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`modified_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Общий столбец автоматически рассчитывается с контроллера. т.е. все результаты тестов + результаты экзаменов. Затем самые высокие и самые низкие баллы получаются на основе общих баллов.
Все работает хорошо, но из-за существующих обстоятельств (Covid-19 Pandemi c), необходимо внести изменения, и именно здесь возникает проблема .
Теперь, перед закрытием школ, вводились только результаты тестов (т.е. от ca1 до ca6). Они не смогли написать свои экзамены, поэтому в колонке для экзаменов было пустое место.
Чтобы исправить это, был сделан вывод о подсчете суммы всех CA, умножении на 40 и делении на 60.
CA Всего X 40/60
Это дало бы оценку за экзамен.
Я не очень разбираюсь в кодировании. Можно сказать, что я хуже новичка. Тем не менее, я попытался рассчитать экзамен и общий балл в представлении. Теперь я застрял в том, как получить самые высокие и самые низкие оценки, так как они были получены из запроса
Модель для самого высокого / самого низкого результата
public function GetHighestScore($subject_id, $session_id, $section_id, $class_id)
{
$this->db->select_max('tot_score');
$this->db->where('subject_id', $subject_id);
$this->db->where('session_id', $session_id);
$this->db->where('section_id', $section_id);
$this->db->where('class_id', $class_id);
return $this->db->get('scores_primary')->row();
}
public function GetLowestScore($subject_id, $session_id, $section_id, $class_id)
{
$this->db->select_min('tot_score');
$this->db->where('subject_id', $subject_id);
$this->db->where('session_id', $session_id);
$this->db->where('section_id', $section_id);
$this->db->where('class_id', $class_id);
return $this->db->get('scores_primary')->row();
}
Контроллер наивысшего и наименьшего балла
public function GetHighestScore($subject_id, $session_id, $section_id, $class_id)
{
$data = $this->primary_model->GetHighestScore($subject_id, $session_id, $section_id, $class_id);
return $data->tot_score;
}
public function GetLowestScore($subject_id, $session_id, $section_id, $class_id)
{
$data = $this->primary_model->GetLowestScore($subject_id, $session_id, $section_id, $class_id);
return $data->tot_score;
}
Представление
<td style="border: 1px solid black; font-size:11px;width:120px;text-align:center;"><?php echo $CI->GetHighestScore($value->subject_id, $value->session_id, $value->section_id, $value->class_id, $value->class_id); ?></td>
<td style="border: 1px solid black; font-size:11px;width:120px;text-align:center;"><?php echo $CI->GetLowestScore($value->subject_id, $value->session_id, $value->section_id, $value->class_id); ?></td>
Поскольку я рассчитал экзамен и общее количество баллов из представления , из-за этого вышеприведенные коды стали нулевыми, потому что общий счет теперь вычисляется прямо в представлении.
Есть ли для меня теперь способ получить самый высокий и самый низкий в классе, используя мои вычисления? или как мне сделать эти вычисления в контроллере так, чтобы общее, самое высокое и самое низкое в классе автоматически генерировались так, как они используют?
Contoller
function assigngradeAction()
{
for($i=0; $i<count($this->input->post('number')); $i++)
{
$data[]=array(
'section_id' => $this->input->post('section_id'),
'subject_id' => $this->input->post('subject_id'),
'class_id' => $this->input->post('class_id')[$i],
'student_id' => $this->input->post('student_id')[$i],
'session_id' => $this->input->post('session_id'),
'ca1' => $this->input->post('ca1')[$i],
'ca2' => $this->input->post('ca2')[$i],
'ca3' => $this->input->post('ca3')[$i],
'ca4' => $this->input->post('ca4')[$i],
'project' => $this->input->post('project')[$i],
'affective' => $this->input->post('affective')[$i],
'psychomotor' => $this->input->post('psychomotor')[$i],
'exam' => $this->input->post('exam')[$i],
'tot_score'=> $this->input->post('ca1')[$i] + $this->input->post('ca2')[$i] + $this->input->post('ca3')[$i] + $this->input->post('ca4')[$i] + $this->input->post('project')[$i] + $this->input->post('affective')[$i] + $this->input->post('psychomotor')[$i] + $this->input->post('exam')[$i],
}
//var_dump($data);
$inserted = $this->primary_model->add2($data2);
if($inserted)
{
$this->session->set_flashdata('msg', '<div class="alert alert-success">Grade Added successfully</div>');
//Echo back success json
redirect('admin/teacher/GetStudentForSubject');
}
}
Просмотр
<tr>
<td style="border: 1px solid black; font-size:11px;width:120px;white-space: nowrap;height:30px;">
<?php echo $CI->GetSubjectNameWithID($value->subject_id); ?>
</td>
<td style="border: 1px solid black; font-size:11px;width:120px;text-align:center;"><?php echo $value->ca1; ?></td>
<td style="border: 1px solid black; font-size:11px;width:120px;text-align:center;"><?php echo $value->ca3; ?></td>
<td style="border: 1px solid black; font-size:11px;width:120px;text-align:center;"><?php echo $value->ca4; ?></td>
<td style="border: 1px solid black; font-size:11px;width:120px;text-align:center;"><?php echo $value->project; ?></td>
<td style="border: 1px solid black; font-size:11px;width:120px;text-align:center;"><?php echo $value->affective; ?></td>
<td style="border: 1px solid black; font-size:11px;width:120px;text-align:center;"><?php echo $value->psychomotor; ?></td>
<td style="border: 1px solid black; font-size:11px;width:120px;text-align:center;"><?php echo $value->ca1 + $value->ca3 + $value->ca4 + $value->project + $value->affective + $value->psychomotor; ?></td>
<td style="border: 1px solid black; font-size:11px;width:120px;text-align:center;"><?php echo round($value->ca1 *40/60 + $value->ca3*40/60 + $value->ca4*40/60 + $value->project*40/60 + $value->affective*40/60 + $value->psychomotor*40/60, 1); ?></td>
<td style="border: 1px solid black; font-size:11px;width:120px;text-align:center;"><?php echo round($value->tot_score = $value->ca1 *40/60 + $value->ca3*40/60 + $value->ca4*40/60 + $value->project*40/60 + $value->affective*40/60 + $value->psychomotor*40/60 + $value->ca1 + $value->ca3 + $value->ca4 + $value->project + $value->affective + $value->psychomotor, 1); ?></td>
<td style="border: 1px solid black; font-size:11px;width:120px;text-align:center;"><?php echo $grade; ?></td>
<td style="border: 1px solid black; font-size:11px;width:120px;text-align:center;"><?php echo $CI->GetHighestScore($value->subject_id, $value->session_id, $value->section_id, $value->class_id, $value->class_id); ?></td>
<td style="border: 1px solid black; font-size:11px;width:120px;text-align:center;"><?php echo $CI->GetLowestScore($value->subject_id, $value->session_id, $value->section_id, $value->class_id); ?></td>
<td style="border: 1px solid black; font-size:11px;width:120px;white-space: nowrap;">
<?php
$scores2 = $CI->GetSubjectScores($value->subject_id, $value->session_id, $value->section_id, $value->class_id); //echo $value->pos;
$scores = array_column($scores2, 'tot_score');
$pos = array_search($value->tot_score, $scores);
//var_dump($pos);
$number = $pos + 1;
echo $CI->ordinal($number);
?>
</td>
<td style="border: 1px solid black; font-size:11px;width:120px;text-align:center;"><?php echo $remark; ?></td>
</tr>