【问题标题】:BETWEEN not working in MySQL在 MySQL 中不工作之间
【发布时间】:2011-12-10 08:33:42
【问题描述】:

我正在实施一个酒店预订网站,酒店所有者可以在该网站上根据空房情况预订房间。为了检查可用房间的数量,我编写了如下代码:

$q=" SELECT * 
        FROM  tbl_roombook
        WHERE
        hotel_id='$h_id'AND
        start_date
        BETWEEN  '$date1'
        AND  '$date2'
        AND end_date
        BETWEEN  '$date1'
        AND  '$date2'

    ";
$res = $this->db->returnArrayOfObject($q);
//var_dump($res);

在我的数据库中,从 2011-12-25 到 2011-12-31 预订了 2 个房间。我的 echo $date12011-12-29$echo date22011-12-30 。但是$q 返回空结果!为什么?

【问题讨论】:

  • start_dateend_date的列类型是什么?
  • 他们在约会中
  • 开始日期 111225 不在 111229 和 111230 之间
  • 请尝试start_date <= '$date2' AND end_date >= '$date1' See this answer 进行解释。
  • 在调试查询时,查看 mysql 查询日志以实际了解执行的内容非常有用。您这里的问题是 MySQL 查询,用 PHP 将问题复杂化只会使问题看起来更复杂。

标签: php mysql date between


【解决方案1】:

对于您给出的示例,它应该不会返回任何结果... start_date=2011-12-25 并且不在 2011-12-29 和 2011-12-30 之间,因此该表达式在那里是错误的。我想你想看看预订范围和新的可能预订范围之间是否有任何重叠,对吗?

为此,您需要检查

start_date > '$date2' OR end_date < '$date1; 

假设 $date1 总是在 $date2 之前。

【讨论】:

    【解决方案2】:

    该示例将不会返回您提供的 date1date2 条目的任何结果。那是因为假设您的 start_date = 2011-12-25end_date = 2011-12-31
    这两个值都不在您提供的日期范围2011-12-29 and 2011-12-30
    因此不会产生任何结果。 你可以用相反的方式使用它

    '$date1' BETWEEN start_date AND end_date 
     OR  '$date2' BETWEEN start_date AND end_date 
    

    【讨论】:

      猜你喜欢
      • 2014-04-22
      • 1970-01-01
      • 2019-11-11
      • 1970-01-01
      • 1970-01-01
      • 2014-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多