Php 复杂的MySQL查询-检查重叠的日期间隔
我正在尝试编写一个函数来移动计划任务。该计划不能与任何其他事件重叠。我的用户输入如下:Php 复杂的MySQL查询-检查重叠的日期间隔,php,mysql,date,intervals,Php,Mysql,Date,Intervals,我正在尝试编写一个函数来移动计划任务。该计划不能与任何其他事件重叠。我的用户输入如下: Schedules | schedule_id | start_time | end_time | task_id | 1 | 2015-12-21 02:00:00 | 2015-12-21 04:00:00 | 1 | 2 | 2015-12-21 08:30:00 | 2015
Schedules
| schedule_id | start_time | end_time | task_id
| 1 | 2015-12-21 02:00:00 | 2015-12-21 04:00:00 | 1
| 2 | 2015-12-21 08:30:00 | 2015-12-21 09:30:00 | 1
| 3 | 2015-12-22 01:00:00 | 2015-12-22 02:00:00 | 2
Tasks
| task_id | name | max_duration
| 1 | do things | 2
| 2 | do stuff | 1
- 附表(int)
- 新开始时间(日期时间)
Schedules
| schedule_id | start_time | end_time | task_id
| 1 | 2015-12-21 02:00:00 | 2015-12-21 04:00:00 | 1
| 2 | 2015-12-21 08:30:00 | 2015-12-21 09:30:00 | 1
| 3 | 2015-12-22 01:00:00 | 2015-12-22 02:00:00 | 2
Tasks
| task_id | name | max_duration
| 1 | do things | 2
| 2 | do stuff | 1
用户可以在start\u time
和end\u time
之间启动“任务”。在该窗口之前,用户无法开始“任务”。一旦该用户开始任务,他们就拥有完成该任务ID的max_duration
。还有一个15分钟的时间窗口用于设置下一个任务。这意味着在窗口结束前1秒开始任务的用户仍有max_duration
时间来完成任务。因此,无法安排任何时间的“实际窗口”是start\u time
到(end\u time
+max\u duration
+15
)。我想移动一个事件(或插入一个新事件),但我必须检查重叠。基本上,我必须确保:
- 从用户输入的
是否运行到任何其他计划的开始时间
+结束时间
+最大持续时间
15
+结束时间
+15是否与任何其他计划的最长持续时间
一致<代码>结束时间只需获取新的开始时间
并添加原始持续时间(开始时间
=(结束时间
-开始结束时间
)+开始时间
开始时间
有什么想法吗?@RyanVincent-Ya,但是问题出现在“左侧”。我不知道在我询问之前,可能重叠的时间表的正确“结束”时间是什么,因为我不知道该事件的持续时间(一个可以是一小时,一个可以是三小时)。我必须能够同时进行所有的计算和查询规则听起来不错。让我们来谈谈流程。您是否希望用户开始在您的用户界面上工作,并且当用户开始时,您希望进行所有的计算并告诉用户是否可以开始?在您的计划中,您如何区分任务的两个记录_id 1(是否有活动标志?@amdixon-我没有。对于给定的任务,可能会有很多时间表。任务只是一个动作。一个人可以在下午2:00-4:00(有2小时的时间洗车)之间洗车,另一个人可以在8:30-9:30(有2小时的时间洗车)。它们不必是唯一的。那么如何区分不同的用户任务计划