繁体   English   中英

如何使用PHP和MySQL显示一百名学生中的学生排名?

[英]How to display a students rank out of hundred students using PHP & MySQL?

我试图从一百个班级中确定某个学生的排名,我希望能够显示学生的排名。

我正在尝试按年级和分数来获得学生的排名。 例如,如果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)
);

更新

您需要一个汇总。 做一个SUM()和COUNT()。 COUNT会告诉您作业数量,sum会告诉您总成绩分数。 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);

这将累加成绩,并计算作业数量。 排序将确保从3个作业中获得10分的学生比在4个作业中获得10分的学生具有更高的排名。

请参阅COUNT SUM和GROUP BY聚合。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM