2

我正在尝试创建基本上是时间戳搜索查询的内容。用户输入所需预订的开始时间和结束时间,搜索会找到该房间在该时间段内的任何当前预订。如果找到匹配项,则告知用户该房间已被预订。

我遇到的问题是当我发送这个查询时:

SELECT * FROM event WHERE begintime <= '$start' AND endtime >= '$end' AND room = '$room';

我没有记录。变量包含正确的信息,所以我怀疑我使用算术运算符的方式是错误的。我环顾四周,发现许多示例都在一个查询中使用了两种类型的比较,但仅针对一列。我还没有发现有人在一个查询中将一个值与一列进行比较,并将一个值与另一列进行比较的例子。

有人知道我做错了什么吗?任何帮助深表感谢。谢谢!

编辑:我在纪元时间设置了时间戳,因此放入搜索的开始时间将大于或等于数据库中已经存在的时间,以介于开始时间和结束时间之间。结束时间倒数,因为投入搜索的时间将小于或等于数据库中的结束时间,介于开始时间和结束时间之间。翻转标志将在数据库中找到预订之外的时间。输入经过验证。

4

4 回答 4

0

你应该换他们,我猜?

这里是:

SELECT * FROM event WHERE begintime >= '$start' AND endtime <= '$end' AND room = '$room'; 

您需要在开始日期之后和结束日期之前的开始时间。另外 - 您可能想要验证您的开始和结束变量是否符合以下要求:

  1. 它们要么相等(在最坏的情况下) 要么
  2. 开始时间小于结束时间。

否则,您不能保证收到任何结果。

于 2011-12-01T08:24:24.217 回答
0

如果我理解这篇文章,$start并且$end是用户的输入。

在这种情况下,您应该将查询编写为:

SELECT * FROM event WHERE begintime >= '$start' AND endtime <= '$end' AND room = '$room';

条件以相反的顺序排列。

于 2011-12-01T08:26:57.680 回答
0

发现你有不同的场景:

  • 预订在您的搜索期内开始
  • 预订在您的搜索期结束
  • 预订在您搜索期之前开始,并在搜索期之后结束。

您必须搜索所有三个

SELECT * FROM event WHERE ((begintime <= '$start' AND endtime >= '$end') OR (begintime >= '$start' AND endtime <= '$start')  OR (begintime >= '$end' AND endtime <= '$end')) AND room = '$room';
于 2011-12-01T08:30:14.087 回答
0
SELECT * 
  FROM event 
 WHERE CASE 
          WHEN begintime > '$start' THEN begintime 
          ELSE '$start' 
       END
       <
       CASE 
          WHEN endtime > '$end' THEN '$end'
          ELSE endtime 
       END
       AND room = '$room';
于 2011-12-01T09:17:51.560 回答