Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 复杂的MySQL查询-检查重叠的日期间隔_Php_Mysql_Date_Intervals - Fatal编程技术网

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是否与任何其他计划的
    开始时间
    一致<代码>结束时间只需获取新的
    开始时间
    并添加原始持续时间(
    结束时间
    =(
    开始结束时间
    -
    开始时间
    )+
    开始时间
例如,上表对schedule_id的1和2有效,因为用户可以在2:00和4:00之间的任何时间开始。假设他在末尾开始,则3:59:59事件将最多持续到5:59:59。即使清理窗口为15分钟,这仍然会导致6:14:59,并且由于下一个计划在8:30开始,这是可以的

我已经想了好几个小时了。我想用纯MySQL来做这件事,但是如果我真的需要的话,我正在考虑使用PHP。即使在PHP中,这个问题似乎也很难解决。当然,我可以提前一天或两天开始,晚一天或两天结束,然后比较我的时间间隔,但这似乎非常困难


有什么想法吗?

@RyanVincent-Ya,但是问题出现在“左侧”。我不知道在我询问之前,可能重叠的时间表的正确“结束”时间是什么,因为我不知道该事件的持续时间(一个可以是一小时,一个可以是三小时)。我必须能够同时进行所有的计算和查询规则听起来不错。让我们来谈谈流程。您是否希望用户开始在您的用户界面上工作,并且当用户开始时,您希望进行所有的计算并告诉用户是否可以开始?在您的计划中,您如何区分任务的两个记录_id 1(是否有活动标志?@amdixon-我没有。对于给定的任务,可能会有很多时间表。任务只是一个动作。一个人可以在下午2:00-4:00(有2小时的时间洗车)之间洗车,另一个人可以在8:30-9:30(有2小时的时间洗车)。它们不必是唯一的。那么如何区分不同的用户任务计划