mysql/php中基于时间的事件资源可用性
对于事件系统,我需要检查是否有足够的资源可用于事件。事件有一个开始和结束时间戳,并且需要大量资源(为了简单起见,我们假设只有一种类型的资源)。预订新活动时,应检查是否可能。所有事件都是基于原则的php对象,时间戳不需要比分钟更具体 我在下面的例子中遇到了麻烦:mysql/php中基于时间的事件资源可用性,php,mysql,doctrine,Php,Mysql,Doctrine,对于事件系统,我需要检查是否有足够的资源可用于事件。事件有一个开始和结束时间戳,并且需要大量资源(为了简单起见,我们假设只有一种类型的资源)。预订新活动时,应检查是否可能。所有事件都是基于原则的php对象,时间戳不需要比分钟更具体 我在下面的例子中遇到了麻烦: 12:00至13:00需要1个资源 13:00至14:00需要1个资源 将创建一个新事件,该事件需要12:00到14:00之间的1个资源 假设我们总共有2个资源,那么这应该是可能的。我当前选择与新事件重叠的所有事件(从12:00到14
- 12:00至13:00需要1个资源
- 13:00至14:00需要1个资源
- 将创建一个新事件,该事件需要12:00到14:00之间的1个资源
我如何(有效地)检查是否可能发生新事件?要么只使用条令查询,要么使用条令查询进行基本选择,然后使用php进行过滤。到目前为止,我提出的唯一解决方案是:选择12:00到14:00之间的所有事件,如果资源超售,则每分钟检查一次(120次迭代)。因为您使用的是时间戳,所以这相当容易 你会调出当天的所有活动。然后在每个事件上循环,查看新事件的时间戳边界是否与现有事件的时间戳边界冲突
$conflict = false;
foreach($arrEvents as $event) {
if ($newStart >= $existingStart && $newStart < $existingEnd) {
// The start time falls within this event's time
$conflict = true;
} elseif ($newEnd > $existingStart && $newEnd <= $existingEnd) {
// The end time falls within this event's time
$conflict = true;
} elseif ($newStart <= $existingStart && $newEnd >= $existingEnd) {
// Existing event falls completely within the new event
$conflict = true;
}
}
$conflict=false;
foreach($事件作为$事件){
如果($newStart>=$existingStart&$newStart<$existingEnd){
//开始时间在此事件的时间内
$conflict=true;
}elseif($newEnd>$existingStart&&$newEnd)这就是我现在正在做的事情。不幸的是,这不包括我描述的情况。如果可以同时有两个事件,而我们当前有两个事件(12:00-13:00和13:00-14:00),那么应该可以在12:00-14:00之间添加一个新事件,而不会发生冲突。