Mysql在一个单元格中处理多个条目

时间:2017-05-15 18:32:45

标签: mysql time cell

所以我正在为我的工作制定一个计划系统基本上我想知道是否有一种方法可以让mysql做类似的事情:

       |Monday  |tuesday|wendsday|total
|Dan   |5am-7am |7am-6pm|6am-11am|
        11am-2pm|       |2pm-7pm |
        5pm-12am|

如果需要,我可以在同一个单元格中为每个人输入多个轮班,而不是重复几次的名称,如:

    Dan|5-4|
    Dan|6-8|

如果有一个函数来计算一个多班次的单元格的总时间

2 个答案:

答案 0 :(得分:1)

有一种方法(将数据表示为字符串),但您不想这样做 - 您将失去所有计算,搜索等。 您不应该尝试将数据库中的数据完全表示为纸上的数据。 我会做一个这样的表:

ShiftID|Person|StartTime|EndTime

制作StartTime& DATETIME类型的EndTime列,您不仅可以存储班次开始的HH:mm,还可以存储日期。如果你有一个从一天开始到下一个结束的班次很有帮助,比如周一开始的时间为2017-05-15 23:00,结束于周二2017-05-16 02:00。

您可以使用MySQL DATE()函数仅从此字段中提取日期,并仅选择那些在此日开始或结束的entires。 要计算班次的持续时间,你可以使用MySQL函数TIMESTAMPDIFF() 你甚至可以使用DAYOFWEEK()来获取它是星期一,星期二等等。

关于复制此人的姓名 - 我会创建另一个表格,该表格会将用户与他们的数据匹配到ID列中的使用ID,但是对于启动者,如果您的数据不大且速度快不是问题,如果错字错误(如Den而不是Dan)不是问题......你可以直接在这个表中使用这个名字。

将数据存储在这样的表中后,您可以按照HTML(或打印)的方式表示数据。

答案 1 :(得分:0)

您可以使用以下列创建第三个表:

person_id int,
start_time datetime,
end_time datetime

其中person_idPerson表的外键,start_timeend_time是datetime列。然后,您可以在此表中为一个人存储多个记录,并使用MySQL的date functionsGROUP BY来生成类似于相关报告的报告。