[英]Date interval using PHP and SQL
我想在我的 PHP 代码中选择日期$checkin
和$checkout
中可用的数据。 想象一下,我的tblreservation
checkin
、 checkout
和roomname
有 3 列,并且已经有 4 个数据。
DATA in `tblreservation`
checkin: 2018/06/14
checkout: 2018/06/21
roomname: room A
checkin: 2018/06/21
checkout: 2018/06/23
roomname: room B
checkin: 2018/06/24
checkout: 2018/06/27
roomname: room C
这是 PHP 中的代码
$checkin = "2018/06/25";
$checkout = "2018/06/26";
$query = mysqli_query($db, "SELECT * from tblreservation where checkin > '$checkin' AND checkout > '$checkout');
"SHOULD" OUTPUT: Room A and Room B
//because the room C is already reserved, then the room a and room b will select.
在这里,我试图分析这种情况,但我对如何做到这一点感到很困惑,请帮助我解决这个问题。
基本上,您需要首先找到该时间范围内已预订的所有房间,然后找到不在此列表中的房间。
对于第一个,您有 3 个场景:
checkin <= '$checkout' AND checkin > '$checkin'
checkout >= '$checkin' AND checkout < '$checkout'
checkin <= '$checkin' AND checkout >= '$checkout'
把这些放在一起给我们这个声明,它给了我们所有被阻止/保留的房间:
SELECT roomID from tblreservation where
(checkin <= '$checkout' AND checkin > '$checkin')
OR (checkout >= '$checkin' AND checkout < '$checkout')
OR (checkin <= '$checkin' AND checkout >= '$checkout')
现在让我们获取不在此列表中的所有房间:
SELECT * from rooms where
id NOT IN (
SELECT roomID from tblreservation where
(checkin <= '$checkout' AND checkin > '$checkin')
OR (checkout >= '$checkin' AND checkout < '$checkout')
OR (checkin <= '$checkin' AND checkout >= '$checkout')
)
所有这些都是由您需要调整的幻想表/列名和类型组成。
还将其转移到准备好的语句中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.