[英]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.