【问题标题】:How can I store dates/attendance?如何存储日期/出勤率?
【发布时间】:2011-12-23 18:48:58
【问题描述】:

我正在寻找意见。

我有一个人员列表,当他们出现在某个位置时需要存储,以便负责人可以从列表中核对他们。我不能 100% 确定约会需要多长时间,但我假设他们可能需要查看以前的出席名单。

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

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

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

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

【问题讨论】:

  • 使用一列存储数据列表几乎总是一个错误的决定。没有有效的查询来获取基于日期过滤器的数据集(在您的情况下)。以下答案中的尼尔斯方式是正确的起点。

标签: php database date storage


【解决方案1】:

一个复杂但也非常干净的方法是

表“人”:

  • 身份证
  • 姓名

表格“日期”:

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

表“出勤率”:

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

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

如前所述,这实施起来很复杂,但非常灵活 - 您可以有任意数量的日期和参加者;您可以以编程方式让人们免于参加特定日期;您可以将人员添加到组...

【讨论】:

  • 我为另一个项目做了类似的事情。也许我会再次使用这种方法。似乎这就是要走的路。唯一需要担心的是 date_id 将在列中重复。 15 位与会者意味着 date_id 将出现 15 次。
  • @dcp 但这真的不是问题,不是吗?除非您要存储数十亿个日期,否则可能......
  • 我担心用户不会设置日期。这意味着他们可以在任何给定的一天在任何给定的时间上“课”。经过一些刺激,似乎他们的时间设置为 4 个月,然后他们改变了。所以这个选项可能会起作用。令人高兴的是,它接近我正在考虑使用的设置。
【解决方案2】:

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

例如

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 分钟后返回晚会。

【讨论】:

    【解决方案3】:

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

    您可以使用查询将表 PersonAttendance 连接起来。

    【讨论】:

      【解决方案4】:

      链接表。

      一桌人

      • 身份证
      • 姓名

      一张表

      • 身份证
      • 姓名

      一张表将人员与班级联系起来。

      • 身份证
      • 个人ID
      • 类ID
      • 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 的人。

      【讨论】:

        猜你喜欢
        • 2020-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-27
        相关资源
        最近更新 更多