gpt4 book ai didi

PHP mysql动态表(考勤表)

转载 作者:行者123 更新时间:2023-11-29 03:08:21 25 4
gpt4 key购买 nike

我的数据库中有 3 个表:

  • 学生
  • 类(class)
  • 出席

前 2 个表有 2 个字段(id、名称),第三个表有:corseID、studID、attDate 和 attStatus,其中 attStatus 存在或不存在

我需要的是:具有以下属性的动态表:

  • 第一列的标题应为“姓名”,其中包含学生表中的学生姓名(已完成)
  • 第一行应使用出勤表中 attDate 字段中的日期填充(完成)
  • 上述列和行之间的其余单元格应从出勤表中的 attStatus 字段中提取出勤状态,给出学生姓名和出勤日期

请提供解决此问题的演练(越详细越好)。

最佳答案

您可以使用以下 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

编辑:

你没有说学生是否可以每天参加多门类(class),所以我认为可以。

在 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){}} 绘制每一行。

关于PHP mysql动态表(考勤表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11942088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com