繁体   English   中英

mysql检查房间可用性查询中的下一个和上一个可用时间

[英]mysql check next and previous available period in room availability query

对于我的一个项目,我想添加该功能以显示预订预订系统中的上一个和下一个可用时间段。

我有此查询,检查房子是否可用:

SELECT id
  FROM tbl_reservations
  WHERE (
    `status` LIKE 'confirmed' OR `status` LIKE 'total-payed'
   ) AND (
     '2015-08-12' BETWEEN checkin AND checkout 
     OR checkout BETWEEN '2015-08-12' AND '2015-08-13'
     OR '2015-08-12' BETWEEN checkin AND checkout
     OR checkin BETWEEN '2015-08-12' AND '2015-08-13'
   );

如果在该期间找到保留,PHP脚本将返回false,因此显示如下消息

“对不起,在所选期间内没有空房”

我还想显示类似的东西:

“下一个可供XX晚住宿的时间是:”

然后显示签到和签出日期。

上期相同。

我不是精通sql的100%,因此我在这里寻求任何建议以指出正确的方向。

这是两个解决方案。

获取预期住宿的下一个可用预订:

SELECT id
FROM tbl_reservations
WHERE (
  `status` != 'confirmed' and `status` != 'total-payed'
 )
and checkin = (select min(checkin) from tbl_reservations
               where checkin > '2015-08-12'
                 and checkout - checkin >= '2015-08-12' - '2015-08-13');          

提前获得预期的住宿预订。

SELECT id
  FROM tbl_reservations
  WHERE (
    `status` != 'confirmed' and `status` != 'total-payed'
   )
  and checkin = (select max(checkin) from tbl_reservations
                 where checkin < '2015-08-12'
                 and checkout - checkin >= '2015-08-12' - '2015-08-13');

这些可以很容易地组合成一个查询,但是从这个问题看来,您想要两个单独的查询。 这些已经过测试,随时可以使用。

我已经解决了这种方式:

由于访客主要对他/她选择的时期感兴趣,因此我对原始签入日期之前和之后的30天(最长)运行相同的查询。

我一收到“假”就中断循环,这意味着在剧院期间没有预订。

也许这不是最优雅的方式,也不是最高效的方式,但是它正在起作用,我很高兴:)

任何进一步的建议仍被接受。 永远更好!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM