2010-06-18 1 views
0

Я пытаюсь получить звание определенного ученика из класса сотен, я хочу, чтобы я мог показать ранг учеников.Как отобразить студентский ранг из ста студентов, использующих PHP и MySQL?

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

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

$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) 
); 
+0

Что вы можете сделать, это посмотреть, сколько оценок - количество числа оценок - у каждого ученика есть и порядок от этого Asc, а затем по фактическим пунктам. Пример: у student1 есть 2 A +, а student2 - 3B, таким образом, у обоих у них 10 баллов. Но у ученика только 2 класса, которые дали ему 10 очков, так что это означает, что студент должен иметь более высокий ранг. –

ответ

2

ОБНОВЛЕНО

Вам нужен агрегат. Сделайте SUM() и COUNT(). 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.

+0

Я использую grade_points, который равен определенному классу, например A + = 5 B + = 4 и так далее. – codeMONKEY

+0

Но как я узнаю, где студент? – codeMONKEY

+0

Запрос возвращает всех студентов, отсортированных по рангу. Поэтому запросите всех учеников, затем используйте php, чтобы вытащить ту, которую вы хотите. Их ранг является ключом к массиву '$ gp []'. Поскольку у вас всего 100 студентов, не беспокойтесь об эффективности здесь. он будет находиться в субмикросекундном диапазоне. –

 Смежные вопросы

  • Нет связанных вопросов^_^