我如何存储日期/出勤?

时间:2011-11-07 16:36:28

标签: php database date storage

我正在寻找意见。

我有一个人员列表,当他们出现在某个位置时需要存储,以便负责人可以从列表中查看它们。我不是100%确定需要多长时间,但我认为他们可能需要查看以前的出勤名单。

我的第一直觉是为每个日期添加一列,但这可能会导致许多列。我可以在每个人旁边存储一个日期列表:

“01/01 / 2012,01 / 15 / 2012,02 / 18/2012 - ”

可能会导致很长的进入。这似乎都不是一个好的选择。

如果有人对某种方法有任何建议或指导,请告诉我。感谢。

4 个答案:

答案 0 :(得分:2)

复杂但非常干净的方法是

表“人”:

  • ID
  • 名称

表“日期”:

  • ID
  • 位置
  • 日期
  • ...“日期”表需要的任何信息

表“出席率”:

  • date_id(链接到“日期”表中的条目)
  • person_id(链接到“人员”表中的条目)
  • 参加(是/否)

然后用适当的日期填充数据库,并根据每个日期需要出席的人填写“出勤”表。

如上所述,实施起来很复杂,但它非常灵活 - 您可以拥有任意数量的日期和参与者;你可以原谅那些以编程方式参加特定日期的人;你可以将人们添加到群组......

答案 1 :(得分:1)

链接表。

一张人的表

  • ID
  • 姓名

一个班级表

  • ID
  • 名称

一个表格将人与人联系起来。

  • ID
  • PERSONID
  • 的classID
  • CDATE

所以你需要做的就是确定某个学生在特定课程的某个日期被预设:

SELECT *
FROM people p
LEFT JOIN peopletoclass ptc ON p.id = ptc.personid
LEFT join class c ON c.id = ptc.classid
WHERE ptc.cDate = '2011-11-07' AND c.id = '1';

以上(例如)将于2011年11月7日获得班级ID 1的所有人。

答案 2 :(得分:0)

创建一个由attendance字段和person_id字段组成的表“date_present”。您不能使用字符串将其存储到列或长列表中; - )。

您可以使用PersonAttendance加入表格的查询。

答案 3 :(得分:0)

你的第一直觉会导致糟糕的桌面设计。你应该拥有一个单独的表来存储用户/位置/日期元组

e.g。

userID   locationID   date

1       party          1/1/2011 00:00:00
1       bathroom       1/1/2011 00:05:00
1       party          1/1/2011 00:15:00

会显示用户#1在新年前夜派对上,然后在上午12:05在瓷坛前祈祷,然后在10分钟后返回派对。