Fullcalendar SQL用于获取在视图开始之前开始并在视图结束之后结束的事件

时间:2015-09-24 09:14:52

标签: sql fullcalendar

我的SQL查询存在问题,用于获取fullcalendar的事件,除非事件在当前视图开始之前启动,并且在当前视图结束后结束,所以一切正常,例如,如果我有从星期一开始并一直持续到星期三的活动,在星期二的日视图中它不显示。这是因为我不确定如何进行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查询来获取事件持续时间在视图中发生但在视图中没有开始或结束的所有事件?

1 个答案:

答案 0 :(得分:1)

人们经常过度复杂化,并且发现两个区间是否重叠" - 我认为这就是你在这里做的事情。他们试图列举重叠可能发生的所有方式。事实上,一个非常简单的定义涵盖了所有这些定义:

如果出现以下两个区间重叠:

  • 第一个在第二个结束之前开始,
  • 第二个在第一个结束之前开始。
$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();

您通常需要花费几分钟考虑的唯一变体是<符号,以及如果一个区间在另一个区间结束的同一时刻开始(如果您想要这样的区间),您是否考虑重叠两个区间要重叠,请使用<=代替