简而言之:
我想为学生和成绩创建一个列表。当我得到我的sql时,我为同一个学生获得了很多成绩。我想要做的是:
学生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 - > 2年级 学生1 - > 3年级 学生2 - > 1年级 学生2 - > 2年级 学生2 - > 3年级
有什么建议吗?
答案 0 :(得分: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 -> " . implode('->', $grades) . "\r<br>";
}