您可以使用下面的SQL查詢來獲取ALL記錄:
SELECT
s.id Student_ID,
s.name Student_Name,
c.name Course_Name,
a.attStatus Attendance_Status,
a.attDate Attendance_Date
FROM students s
INNER JOIN attendance a ON (s.id=a.studID)
INNER JOIN courses c ON (a.courseID=c.id)
ORDER BY a.attDate ASC
編輯:
你沒有說這是否是學生可以參加每日多次的課程,所以我認爲它可以。
在PHP端,做這樣的事情:
$dates=array();
$students=array();
while($row=mysqli_fetch_assoc($result))
{
if(!in_array($dates[$row["Attendance_Date"]])) $dates[]=$row["Attendance_Date"];
if(empty($students[$row["Student_ID"]]))
$students[$row["Student_ID"]]=array("name"=>$row["Student_Name"]);
if(empty($students[$row["Student_ID"]][$row["Attendance_Date"]])
$students[$row["Student_ID"]][$row["Attendance_Date"]]=array();
$students[$row["Student_ID"]][$row["Attendance_Date"]][$row["Course_Name"]]=$row["Attendance_Status"];
}
因此當循環結束後,可以結束了這樣的$students
陣列:
Array(2) =>
{
123 =>
{
"name"=>"Einstein",
"2012-08-01"=>
{
"Math"=>"present",
"Phys"=>"absent"
}
"2012-08-02"=>
{
"Liter"=>"absent",
"Music"=>"present"
}
}
456 =>
{
"name"=>"Heisenberg",
"2012-08-01"=>
{
"Math"=>"absent",
"Phys"=>"present"
}
}
}
而且隨着$dates
陣列中的所有日期。然後你可以用foreach
的$dates
數組來繪製第一行,然後foreach($students){foreach($dates){}}
來繪製每一行。
這確實給了我想要的結果,但是我的問題是我如何讓它們顯示在 – redamakarem 2012-08-14 15:28:54
@redamakarem之前概述現在如何? – Passerby 2012-08-15 07:13:57