我的数据库中有3个表:
前两个表有2个字段(id,name),第三个表有:corseID,studID,attDate和attStatus,其中attStatus存在或不存在
我需要的是:具有以下属性的动态表:
请提供如何解决此问题的详细信息(更多详情,更好)。
答案 0 :(得分:1)
您可以使用以下SQL查询来获取所有记录:
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){}}
绘制每一行。