Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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_Time_Overlap_Schedule - Fatal编程技术网

计算PHP或MySQL中某个范围内的最大重叠事件数

计算PHP或MySQL中某个范围内的最大重叠事件数,php,mysql,time,overlap,schedule,Php,Mysql,Time,Overlap,Schedule,以前可能有人问过这个问题,但我的搜索结果很差。想象一下,在一个汽车预订系统中,我有三辆车可以随时出租 如何使用PHP和MySQL 5.7确保在新预订的时间范围内不超过此限制 我发现了,但我不确定如何解决MySQL 5.7不支持窗口函数的问题 我可以加载所有发生冲突的保留,并使用PHP逐步计算在该时间间隔内哪些保留发生冲突,并取最大值,但我认为这是一个常见的问题,有更好的解决方案 信息 数据库将开始时间和结束时间存储为时间戳数据类型。 从范围的开始到结束,需要每隔1分钟检查一次。 简图 因此,要检

以前可能有人问过这个问题,但我的搜索结果很差。想象一下,在一个汽车预订系统中,我有三辆车可以随时出租

如何使用PHP和MySQL 5.7确保在新预订的时间范围内不超过此限制

我发现了,但我不确定如何解决MySQL 5.7不支持窗口函数的问题

我可以加载所有发生冲突的保留,并使用PHP逐步计算在该时间间隔内哪些保留发生冲突,并取最大值,但我认为这是一个常见的问题,有更好的解决方案

信息 数据库将开始时间和结束时间存储为时间戳数据类型。 从范围的开始到结束,需要每隔1分钟检查一次。 简图
因此,要检查特定时刻,您需要:

select count(1) conflicts
from events
where start_time <= desired_time && end_time > desired_time;
要查找所需时间范围内的最大冲突数,无需每分钟检查一次,只需在开始时间或所需开始时间(如果是每个冲突事件的较晚时间)进行检查:

select coalesce(max(conflicts),0) max_conflicts
from (
    select count(1) conflicts
    from (
        select distinct greatest(DESIRED_START_TIME, start_time) desired_time
        from events
        where start_time < DESIRED_END_TIME && end_time > DESIRED_START_TIME
    ) conflicting_events
    join events on start_time <= desired_time && end_time > desired_time
) point_in_time_conflicts;

未经测试

请从您的表格中发布样本数据是否存在一些最大事件长度?谢谢!我会检查一下,一看到结果就做标记。我知道必须有一种方法,只需要检查开始时间就可以了。一旦你说出来,这似乎很明显,但我却没有想到。所以我从来没能让它起作用。我将来可能会花更多的时间在它上面,但与此同时,它为我指明了一个正确的方向,那就是一些正在工作的东西。非常感谢。考虑到我认为它是正确的解决方案,即使它需要调整,我认为它是正确的。