[英]Fullcalendar SQL to get events that start before the view starts and end after the view ends
我的SQL查询有一个问题,该查询用于获取全日历事件,除非在当前视图开始之前开始一个事件,在当前视图结束之后结束一个事件(例如,如果我有一个开始的事件),否则一切工作正常直到星期一,直到星期三,在星期二的日视图中都不会显示。 这是因为我不确定如何进行SQL查询以获取符合此条件的事件。 我的当前查询如下:
$query = $conn->prepare('SELECT * FROM calendar WHERE start BETWEEN :start1 AND :end1 OR end BETWEEN :start AND :end ORDER BY start ASC');
$query->bindValue(':start1', $_POST['start']);
$query->bindValue(':end1', $_POST['end']);
$query->bindValue(':start', $_POST['start']);
$query->bindValue(':end', $_POST['end']);
$query->execute();
是否可以构成一个SQL查询来获取所有事件,这些事件的持续时间使事件的持续时间在视图期间发生,而不是在视图期间开始或结束?
人们常常过于复杂“在两个间隔重叠的情况下查找”-我认为这就是您在这里所做的。 他们尝试枚举可能发生重叠的所有方式。 实际上,当一个非常简单的定义涵盖所有这些条件时:
如果满足以下条件,则两个间隔重叠:
$query = $conn->prepare('SELECT * FROM calendar WHERE start < :end AND :start < end ORDER BY start ASC');
$query->bindValue(':start', $_POST['start']);
$query->bindValue(':end', $_POST['end']);
$query->execute();
通常,您需要花几分钟考虑的唯一变化是<
符号,并且如果一个间隔在另一个间隔结束的同一时刻开始,则是否考虑两个间隔重叠(如果希望这些间隔重叠,则使用<=
代替)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.