Есть ли способ получить самые высокие и самые низкие оценки, используя PHP? - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть таблица результатов для учеников в классе. Все тесты и результаты экзаменов по предметам собраны и записаны там.

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;


A student's score sheet

Общий столбец автоматически рассчитывается с контроллера. т.е. все результаты тестов + результаты экзаменов. Затем самые высокие и самые низкие баллы получаются на основе общих баллов.

Все работает хорошо, но из-за существующих обстоятельств (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>

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

Это то, что я сделал, используя @ sauhardn c решение

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'=> !empty( $this->input->post('exam')[$i] ) ? $this->input->post('exam')[$i] : ($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]) * 40 / 60,
                        '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] + ($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]) * 40 / 60,
}   

                    );

                }




                 $inserted = $this->primary_model->add1($data);
                 if($inserted > 0)
                 {
                     $this->session->set_flashdata('msg', '<div class="alert alert-success">Grade Added successfully</div>');
                     //Echo back success json
                     redirect('admin/primary/index');
                  }           

    }

0 голосов
/ 29 апреля 2020

В вашем контроллере, где вы храните экзамен №. вам нужно проверить состояние, т.е. если экзамена нет. пусто, затем подсчитайте общую сумму (-и), а затем умножьте и разделите (примените ваши логики c).

Помните, что это только временное решение, как только все данные сохранены, вы должны отменить изменения или закомментировать их, если хотите использовать их позже.



Контроллер -> функция assigngradeSingleStudentAction () -> elseif условие //(I'm assuming this issue is only for elseif condition as your code suggests)

else if($this->input->post('class') >= 4 && $this->input->post('class') <= 17)
{

    $data2['section_id']  = $this->input->post('section_id');
    $data2['subject_id']  = $this->input->post('subject_id');
    $data2['class_id']    = $this->input->post('class_id');
    $data2['student_id']  = $this->input->post('student_id');
    $data2['session_id']  = $this->input->post('session_id');
    $data2['ca1']         = $this->input->post('ca1');
    $data2['ca2']         = $this->input->post('ca2');
    $data2['ca3']         = $this->input->post('ca3');
    $data2['ca4']         = $this->input->post('ca4');
    $data2['project']     = $this->input->post('project');
    $data2['affective']   = $this->input->post('affective');
    $data2['psychomotor'] = $this->input->post('psychomotor');

    /* No change till here */
    if( !empty( $this->input->post('exam') )){

        $data2['exam']    = $this->input->post('exam');

    }else{

        $data2['exam']    = ( ( $data2['ca1'] + $data2['ca2'] + $data2['ca3'] + $data2['ca4']) * 40 )/ 60;
    }  // comment this else condition after your work is done.

    $data2['tot_score']   = $this->input->post('ca1') + $this->input->post('ca2') + $this->input->post('ca3') + $this->input->post('ca4') + $this->input->post('project') + $this->input->post('affective') + $this->input->post('psychomotor') + $data2['exam'];
}

Это должно помочь вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...