2015-09-05 36 views
0


簡而言之:
我想爲學生和成績創建一個列表。當我得到我的SQL時,我爲同一個學生獲得了很多成績。我試圖做到這一點的是:foreach的discinct值和多個結果在同一行

學生1 - > 1級 - > 1級 - > 3級
學生2 - > 1級 - > 2級 - > 3級

我的SQL將數據庫中的所有記錄都拉出來,這很棒,但我怎麼才能讓它像這樣顯示?

SQL是非常標準的

$query_getGradesTr1 = "SELECT gradeID, studentID, grades.examID, grade FROM grades, exams WHERE exams.trackID=1 AND grades.examID=exams.examID"; 
$getGradesTr1 = mysql_query($query_getGradesTr1, $Site) or die(mysql_error()); 
$row_getGradesTr1 = mysql_fetch_assoc($getGradesTr1); 
$totalRows_getGradesTr1 = mysql_num_rows($getGradesTr1); 

我想過使用foreach要經過結果,基本的foreach studentID給我與之相關的所有成績和重複每個學生...
但我得到用相同StudentID多個結果然後另一個studentID,像這樣:

學生1 - >等級1
學生1 - >二級
學生1 - >級3
學生2 - >等級1
學生2 - >二級
學生2 - >級3

任何建議??

+0

你有什麼需要做的?數組?你想要的陣列格式是什麼?也許可以是'$ array [student] [grade]',它包含信息?或者可能是'$ array [student] = array(「Grade 1」,「Grade 2」,「Grade 3」)'?這取決於你需要的是非常不同的 –

回答

0

這樣做:

$current_student = NULL; 
foreach($totalRows_getGradesTr1 as $each) { 
    // Check here is student does not matches to previous student 
    if($each->studentID !== $current_student) { 
     // If not matches then print, else ignore 
     echo "$each->studentID"; 
    } 
    // Assign to check again in next loop 
    $current_student = $each->studentID; 
    // Always print grade 
    echo "-> $each->gradeID"; 
} 

另一種方案是,兩次循環的陣列中,並使每個studentId作爲數組鍵分配所有等級的studentID,如:

$students_grades = array(); 
foreach($totalRows_getGradesTr1 as $each) { 
    if(!isset($student_grades[$each->studentID]) { 
     $student_grades[$each->studentID] = array(); 
    } 
    $student_grades[$each->studentID][] = $each->gradeID; 
} 

// Then nested loop here and print records 
foreach($student_grades as $studentID => $grades) { 
    echo "$studentID -&gt; " . implode('-&gt;', $grades) . "\r<br>"; 
}