Как отобразить рейтинг учеников из сотен, используя PHP и MySQL? - PullRequest
0 голосов
/ 19 июня 2010

Я пытаюсь получить звание определенного ученика из класса ста, я хочу иметь возможность отображать звание ученика.

Я пытаюсь получить званиестудент по оценкам и баллам.Например, если student 1 имеет 2 оценки A + с общим количеством 10 баллов, а student 2 имеет 3 оценки B с общим количеством 10 баллов, student 1 будет иметь более высокий рейтинг.Мне было интересно, как я смогу сделать это, используя PHP и MySQL?

Вот код PHP и MySQL, который у меня есть.

$gp = array();
$dbc = mysqli_query($mysqli,"SELECT grades.*, homework_grades.*, users_homework.*
                             FROM grades 
                             LEFT JOIN homework_grades ON grades.id = homework_grades.grade_id
                             LEFT JOIN users_homework ON homework_grades.users_homework_id = users_homework.id
                             WHERE users_homework.user_id = '$user_id'
                             AND users_homework.grade_average = 'A+'");

if (!$dbc) {
    print mysqli_error($mysqli);
} else {
    while($row = mysqli_fetch_array($dbc)){ 
    $gp[] = $row['grade_points'];
}
}

echo array_sum($gp);

Вот мои таблицы MySQL.

CREATE TABLE homework_grades ( 
id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
grade_id INT UNSIGNED NOT NULL, 
users_homework_id INT UNSIGNED NOT NULL, 
user_id INT UNSIGNED NOT NULL, 
PRIMARY KEY (id) 
);



CREATE TABLE grades ( 
id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
letter_grade VARCHAR NOT NULL, 
grade_points FLOAT UNSIGNED NOT NULL DEFAULT 0, 
PRIMARY KEY (id) 
);



CREATE TABLE users_homework (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
user_id INT UNSIGNED NOT NULL,
homework_content LONGTEXT NOT NULL,
grade_average VARCHAR DEFAULT NULL,
PRIMARY KEY (id)
);

1 Ответ

2 голосов
/ 19 июня 2010

ОБНОВЛЕНО

Вам нужен агрегат.Сделайте СУММУ () и СЧЕТ ().COUNT сообщит вам количество заданий, сумма покажет вам общее количество баллов.GROUP BY user_id, чтобы получить это для каждого учащегося.

$gp = array();
$dbc = mysqli_query($mysqli,"SELECT SUM(grade_points) as grade_points, user_id, count(*) as num_assignments
                             FROM grades 
                             LEFT JOIN homework_grades ON grades.id = homework_grades.grade_id
                             LEFT JOIN users_homework ON homework_grades.users_homework_id = users_homework.id
                             GROUP BY user_id
                             ORDER BY grade_points DESC , num_assignments ASC'");

if (!$dbc) {
    print mysqli_error($mysqli);
} else {
    $i=1;
    while($row = mysqli_fetch_array($dbc)){ 
        $user[$row['user_id']] = $i++;
        $rank[] = $row['user_id'];
        $gp[] = $row['grade_points'];
    }
}

// the rank of user 10 is
echo "the rank of user_id 10 is {$user[10]}";
echo "the rank of all users are: " ;
print_r($rank);

Это сложит баллы и посчитает количество заданий.Сортировка гарантирует, что учащийся с 10 баллами из 3 заданий будет иметь более высокий ранг, чем учащийся с 10 баллами из 4 заданий.

См. Агрегат COUNT SUM и GROUP BY.

...