php - 使用 PHP 和 SQL 的日期间隔
问题描述
我想选择日期$checkin
和$checkout
我的 PHP 代码中可用的数据。想象一下,我有 3 列tblreservation
checkin
,checkout
并且roomname
已经有 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')
)
所有这些都是由您需要调整的幻想表/列名和类型组成的。
还将其转移到准备好的语句中。
推荐阅读
- python - 根据pandas Dataframe中的多列替换多列值
- xcode - 应用商店连接错误:ITMS-90683:Info.plist 中缺少目的字符串 -
- sql-server - 当 Select distinct From Features 给出错误 ORDER BY 项目必须出现在选择列表中?
- html - textarea 背景颜色与 body 不同(略暗)
- python - 如何设置二维数组中某些元素的值,它们的位置在 numpy 列表中?
- css - 有没有办法使用自定义图标进行材质ui的分页
- c# - 使用最小起订量进行 SqlQuery() 测试的 DbContext 模拟 - 数据库中已经有一个名为“public”的对象
- python - 在全局声明之前分配名称“运行”
- javascript - 在 AEM 6.4 中使用 jsp 删除页面的脚本
- mysql - 如何在 MySQL 5.7 中获得索引 DESC 排序?