Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.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
mysql/php中基于时间的事件资源可用性_Php_Mysql_Doctrine - Fatal编程技术网

mysql/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

对于事件系统,我需要检查是否有足够的资源可用于事件。事件有一个开始和结束时间戳,并且需要大量资源(为了简单起见,我们假设只有一种类型的资源)。预订新活动时,应检查是否可能。所有事件都是基于原则的php对象,时间戳不需要比分钟更具体

我在下面的例子中遇到了麻烦:

  • 12:00至13:00需要1个资源
  • 13:00至14:00需要1个资源
  • 将创建一个新事件,该事件需要12:00到14:00之间的1个资源
假设我们总共有2个资源,那么这应该是可能的。我当前选择与新事件重叠的所有事件(从12:00到14:00),并获取这些事件所需的所有资源的总和。这意味着新事件不可能发生


我如何(有效地)检查是否可能发生新事件?要么只使用条令查询,要么使用条令查询进行基本选择,然后使用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之间添加一个新事件,而不会发生冲突。