在一个SQL查询中使用大于或等于/小于或等于两次

时间:2011-12-01 08:21:28

标签: sql search comparison-operators

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

我遇到的问题是,当我发送此查询时:

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

我没有记录。变量保存正确的信息,所以我怀疑我使用算术运算符的方式是错误的。我环顾了很多,发现在一个查询中使用了两种类型的比较的例子,但只有一列。我没有找到任何人在一个查询中将值与一列进行比较而将值与另一列进行比较的示例。

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

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

4 个答案:

答案 0 :(得分:0)

你应该切换它们,我猜?

这是:

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

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

  1. 它们要么相等(在最坏的情况下)
  2. 开始时间小于结束时间。
  3. 否则,我们无法保证您收到任何结果。

答案 1 :(得分:0)

如果我理解了帖子,则$start$end是用户的输入。

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

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

这些条件的顺序相反。

答案 2 :(得分: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';

答案 3 :(得分: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';