Данные не поступают правильно из базы данных

Я пытаюсь сделать систему управления результатами студентов. Я сталкиваюсь с проблемой, когда пытаюсь поставить каждого ученика в зависимость от его общей оценки на экзамене. В моем выводе я получаю 1-й (получить отметку 450), 2-й (получить отметку 449), 4-й (получить отметку 448). 3-я позиция отсутствует. 5-я, 10-я, а также некоторые другие позиции отсутствуют. Но я не нахожу никаких проблем в своем коде.

Моя база данных

Данные не поступают правильно из базы данных

if (!function_exists('get_position_in_exam')) {

function get_position_in_exam($school_id, $exam_id, $class_id, $section_id, $mark) {


    $ci = & get_instance();
    $sql = "SELECT id, total_obtain_mark, FIND_IN_SET( total_obtain_mark,(
            SELECT GROUP_CONCAT( total_obtain_mark  ORDER BY total_obtain_mark DESC ) 
            FROM exam_results WHERE school_id = $school_id AND exam_id = $exam_id AND class_id = $class_id AND section_id = $section_id ))
            AS rank 
            FROM exam_results
            WHERE school_id = $school_id AND exam_id = $exam_id AND class_id = $class_id AND section_id = $section_id AND total_obtain_mark = $mark"; 

    $rank =  @$ci->db->query($sql)->row()->rank; 

    if ($mark == 0){
        return '--'; 
    }

    if ($rank == 1){
        return $rank.'st';
    }elseif ($rank == 2){
       return $rank.'nd'; 
    }elseif ($rank == 3){
       return $rank.'rd'; 
    }elseif ($rank > 3 ){
        return $rank.'th';         
    }else{
        return '--'; 
    }
}

}

у вас есть дубликаты результатов экзаменов по делам о недостающих рангах?

Burkely91 21.07.2019 20:27

да как это решить?

Taslima Akhter 22.07.2019 03:58
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
107
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужен отдельный total_obtain_mark в вашем подзапросе

GROUP_CONCAT( distinct total_obtain_mark ORDER BY total_obtain_mark DESC )

"SELECT id, total_obtain_mark, FIND_IN_SET( total_obtain_mark,(
   SELECT GROUP_CONCAT( distinct total_obtain_mark  ORDER BY total_obtain_mark DESC ) 
   FROM exam_results WHERE school_id = $school_id AND exam_id = $exam_id AND class_id = $class_id AND section_id = $section_id ))
   AS rank 
   FROM exam_results
   WHERE school_id = $school_id AND exam_id = $exam_id AND class_id = $class_id AND section_id = $section_id AND total_obtain_mark = $mark";

в противном случае, если у вас есть ученик с таким же рангом, вы пропускаете позицию

Другие вопросы по теме