2010-06-22 94 views
0

到目前爲止,我認爲我做得很對,但我無法正確顯示grade_points這裏是我在下面顯示的內容。我如何解決這個問題,以便我的代碼能夠正確顯示grade_points

如何使用PHP和MySQL正確顯示學生的總分分數?

輸出數據

這裏是我的電流輸出:

user_id Array ([1] => 1 [3] => 2) 
rank Array ([0] => 1 [1] => 3) 
grade_points Array ([0] => [1] =>) 
users Array ([0] => 3 [1] => 2) 
the rank of user_id 3 is #2 

,這裏是我想要的輸出:

user_id Array ([1] => 1 [3] => 2) 
rank Array ([0] => 1 [1] => 3) 
grade_points Array ([0] => 8 [1] => 5) 
users Array ([0] => 3 [1] => 2) 
the rank of user_id 3 is #2 



PHP & MySQL代碼

這是我的PHP & MySQL的代碼。

$i = 1; 

$u = array(); 
$user = array(); 
$rank = array(); 
$gp = array(); 

$dbc = mysqli_query($mysqli,"SELECT SUM(grade_points) as p, grades.grade_points, assignment_grades.*, COUNT(*) as u, users_assignment.user_id 
           FROM users_assignment 
           LEFT JOIN grades ON users_assignment.user_id = grades.letter_grade 
           LEFT JOIN assignment_grades ON grades.id = assignment_grades.grade_id 
           GROUP BY users_assignment.user_id 
           ORDER BY p DESC"); 


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

echo 'user_id '; print_r($u); echo '<br />'; 
echo 'rank '; print_r($rank); echo '<br />'; 
echo 'points '; print_r($gp); echo '<br />'; 
echo 'users '; print_r($user); 

echo "the rank of user_id 3 is" . $u[3]; 



MySQL表

CREATE TABLE assignment_grades ( 
id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
grade_id INT UNSIGNED NOT NULL, 
users_assignment_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_assignment (
id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
user_id INT UNSIGNED NOT NULL, 
assignment_content LONGTEXT NOT NULL, 
grade_average VARCHAR DEFAULT NULL, 
PRIMARY KEY (id) 
); 



TABLE DATA

assignment_grades

id  grade_id  users_assignment_id 
15  15    35 
16  16    35 
17  17    33 

等級

id  letter_grade  grade_points 
15  C+     3 
16  A+     5 
17  A+     5 

users_assignment

id  user_id  assignment_content  grade_average 
32  1   some content   NULL 
33  1   some content   A+ 
34  3   some content   NULL 
35  3   some content   B+ 
36  1   some content   NULL 
+0

哇,這是一個很大閱讀。而我不知道你的實際問題是什麼>< – Jeriko 2010-06-22 19:07:47

+0

我在想如何修復我的代碼,以便我可以正確顯示'grade_points'? – codeMONKEY 2010-06-22 19:14:22

+0

你應該如何做到這一點,而不知道作業的權重是多少?或者他們都值得一樣的金額?而且什麼是grade_average? – 2010-06-22 22:55:36

回答

0

我認爲這個問題是在您的查詢。嘗試更換SUM(grade_points)以SUM(grade.grade_points)

+0

'SUM(grades.grade_points)':( – codeMONKEY 2010-06-22 20:04:22

+0

)沒有成功爲什麼表格結構如此奇怪?爲什麼不在表格中添加usr_id字段,並且您可以在沒有assign_grades的情況下工作。查詢變得容易得多 – GOsha 2010-06-23 05:52:46

0

你查詢的連接並不匹配字段正確 - 嘗試一下本作查詢:

SELECT SUM(grade_points) as p, grades.grade_points, assignment_grades.*, COUNT(*) as u, users_assignment.user_id 
FROM users_assignment 
LEFT JOIN assignment_grades ON users_assignment.id = assignment_grades.users_assignment_id 
LEFT JOIN grades ON grades.id = assignment_grades.grade_id 
GROUP BY users_assignment.user_id 
ORDER BY p DESC 
+0

此代碼似乎對我的代碼的其餘部分造成破壞,但它確實得到了grade_points。有沒有一種方法,我可以改變它,所以它不會導致代碼的其餘部分的問題,但仍然顯示正確的grade_point? – codeMONKEY 2010-06-22 20:56:26

+0

嗯,我由於您的預期輸出而感到困惑 - 因爲用戶3有兩個任務共8點,而用戶1有一個任務共5個點,所以用戶3的等級似乎應該是#1而不是#2,因爲您要訂購總分降低?還是我錯過了什麼? – 2010-06-22 21:15:40

+0

這裏是一個簡單的解釋我試圖通過年級和年級得分的學生的排名。例如,如果學生1有2個+總成績10分,學生2成績3分,總分10分,學生1成績更高。 – codeMONKEY 2010-06-22 21:17:53

相關問題