计算PHP或MySQL中某个范围内的最大重叠事件数
以前可能有人问过这个问题,但我的搜索结果很差。想象一下,在一个汽车预订系统中,我有三辆车可以随时出租 如何使用PHP和MySQL 5.7确保在新预订的时间范围内不超过此限制 我发现了,但我不确定如何解决MySQL 5.7不支持窗口函数的问题 我可以加载所有发生冲突的保留,并使用PHP逐步计算在该时间间隔内哪些保留发生冲突,并取最大值,但我认为这是一个常见的问题,有更好的解决方案 信息 数据库将开始时间和结束时间存储为时间戳数据类型。 从范围的开始到结束,需要每隔1分钟检查一次。 简图计算PHP或MySQL中某个范围内的最大重叠事件数,php,mysql,time,overlap,schedule,Php,Mysql,Time,Overlap,Schedule,以前可能有人问过这个问题,但我的搜索结果很差。想象一下,在一个汽车预订系统中,我有三辆车可以随时出租 如何使用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;
未经测试请从您的表格中发布样本数据是否存在一些最大事件长度?谢谢!我会检查一下,一看到结果就做标记。我知道必须有一种方法,只需要检查开始时间就可以了。一旦你说出来,这似乎很明显,但我却没有想到。所以我从来没能让它起作用。我将来可能会花更多的时间在它上面,但与此同时,它为我指明了一个正确的方向,那就是一些正在工作的东西。非常感谢。考虑到我认为它是正确的解决方案,即使它需要调整,我认为它是正确的。