如何解决计算PHP或MySQL范围内的最大重叠事件
之前可能有人问过这个问题,但我的搜索量不足。想象一个汽车预订系统,我可以在任何给定时间租出三辆车。
如何使用 PHP 和 MySQL 5.7 确保我不会在新预订的时间范围内超出此限制?
我找到了 this answer,但我不确定如何解决 MySQL 5.7 不支持窗口函数的问题。
我可以加载所有冲突的保留,并使用 PHP 逐步执行间隔,计算在该间隔内冲突的保留并取最大值,但我认为这是一个具有更好解决方案的常见问题。
信息
- 数据库将
start_time
和end_time
存储为TIMESTAMP
数据类型。 - 需要从范围开始到结束每隔 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;
(未经测试)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。