gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 09:18:47 24 4
gpt4 key购买 nike

我正在尝试获取某个学生在一百个类(class)中的排名,我希望能够显示学生的排名。

我正在尝试根据成绩和绩点获取学生的排名。例如,如果学生 1 有 2 项 A+ 成绩,总分 10 分,而学生 2 有 3 项 B- 成绩,总分 10 分学生 1 code> 排名会更高。我想知道如何使用 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 聚合。

关于php - 如何使用 PHP 和 MySQL 显示学生在一百名学生中的排名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3073197/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com