计算 PHP 或 MySQL 范围内的最大重叠事件

Calculate maximum overlapping events within a range in PHP or MySQL

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

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

我找到了 ,但我不确定如何解决 MySQL 5.7 不支持 window 函数的问题。

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

信息

图表

所以要检查特定时刻,您可以:

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;

(未经测试)