2010-06-22 2 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 



16,

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

+0

'grade_points '를 올바르게 표시 할 수 있도록 코드를 수정하는 방법이 궁금합니다. – codeMONKEY

+0

과제에 가중치가 무엇인지 모른 채 어떻게해야합니까? 아니면 모두 같은 가치가 있습니까? 그리고 도대체 grade_average는 무엇입니까? –

답변

0

나는 문제가 쿼리에 생각합니다. (grade.grade_points) SUM에 SUM (grade_points)를 대체하려고

+0

'SUM (grades.grade_points)'와 성공하지 못했습니다 : ( – codeMONKEY

+0

왜 테이블의 구조가 이상합니까? grades 테이블에 usr_id 필드를 추가하지 않고 왜 assignment_grades없이 작업 할 수 있습니까? 여기의 쿼리는 훨씬 쉬워졌습니다. – GOsha

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

+0

흠, 나는 사용자 3은 총 8 점의 할당을 받았고 사용자 1은 5 점의 할당을 1 번했기 때문에 사용자 3의 순위는 # 2 대신 # 1이되어야합니다. 총점이 내림차순입니까? 아니면 뭔가 빠졌습니까? –

+0

여기 간략한 설명입니다. 성적 및 학점별로 학생의 순위를 얻으려고합니다. 예를 들어, 학생 1이 2 A + 점수는 10 점이며, 학생 2는 3 점의 B 등급이 있으며 총점은 10 점입니다. 학생 1은 더 높은 점수를 받게됩니다. – codeMONKEY

관련 문제