2

我正在为教师构建一个简单的缺勤脚本来管理学生。

我需要在 5 个表中填充相同的学生列表。当前一周的每一天(周一至周五)一张表。

我现在有以下代码

列出学生SQL查询:

SELECT s.student_id, s.student_firstname, s.student_lastname, 
 a.student_absence_startdate, a.student_absence_enddate, a.student_absence_type
FROM students s 
LEFT JOIN studentabsence a ON a.student_id = s.student_id
WHERE a.student_absence_startdate 
 IS NULL OR 
  '2012-06-20' 
   BETWEEN 
a.student_absence_startdate AND a.student_absence_enddate

此查询选择所有学生并加入另一个表,该表是一个链接表,其中包含学生的缺勤信息。

我像这样填充代码 5 次:

<?php
$data = array();
    while ($row = mysql_fetch_array($list_students)) {
    $data[] = $row;
    }
?>

<table>
  <?php
  foreach($data as $row){
    $class = "";
    if ($row['student_absence_type'] == 2) {$class = " style='background:#f00;'";}
    else if ($row['student_absence_type'] == 3) {$class = " style='background:#8A2BE2;'";}

        echo "<tr><td$class>";
        echo "<a class='ajaxlink' href='#' rel='pages/ajaxAbsence.php?student_id=".$row['student_id']."'>".$row['student_firstname']." ".$row['student_lastname']."</a>";
        echo "</td></tr>\n";
   }
   ?>
</table> <!-- Repeat -->

我的问题是我应该如何管理日期功能。

正如您在我的 SQL 查询中看到的那样,我已经对日期进行了硬编码。我需要它来自动选择列出学生的日期。

例如:

table > Monday (2012-07-23)
    the user John Doe has absence information in this span, based on the above query. Let's change the background of <td>
table > Tuesday (2012-07-24)
    the user John Doe has no absence information in this span. Just list him.
etc...

我不希望你写我的代码。我只是好奇如何思考。我对编程相当陌生。

4

1 回答 1

1

我在您的想法中发现的最明显的错误是您不需要这五张表。你最终会重复和弄乱数据。

从我读过的内容来看,您需要不同的表格。

学生

身份证、姓名等。

课程

class_id,名称,

教师

id_teacher、姓名等

TeachersInClass(所以你现在可以知道哪些老师给了一个特定的课程)

id, id_teacher, id_class

缺勤

id, id_student, id_class, 日期

这为您留下了一个更强大的数据库,并且您可以使用多种关联,例如哪些教师一年中缺勤最多......等等。

编辑:忘记回答你的“真实”问题。

您可以使用 PHP DateTime类来操作您的日期。它很容易使用,而且 php.net 有很多很好的例子可以给你一个提升的开始

于 2012-07-27T10:53:59.113 回答