首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用PHP和SQL的日期间隔

使用PHP和SQL的日期间隔
EN

Stack Overflow用户
提问于 2018-06-18 04:41:31
回答 1查看 66关注 0票数 -1

我想在我的PHP代码中选择date、$checkin$checkout中可用的数据。假设我的tblreservation checkincheckoutroomname中有3列,并且已经有了4个数据。

代码语言:javascript
复制
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编写的代码

代码语言:javascript
复制
$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.

在这里我试图分析这种情况,但我很困惑如何做到这一点,请帮助我走出这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-18 05:26:52

基本上,您需要首先找到该时间段内已预订的所有房间,然后再找到不在此列表中的房间。

对于第一个场景,您有3个场景:

  • 所需的签出晚于保留签入

checkin <= '$checkout' AND checkin > '$checkin'

  • the所需的签入在保留签出之前

checkout >= '$checkin' AND checkout < '$checkout'

  • the所需的数据块在中间

checkin <= '$checkin' AND checkout >= '$checkout'

将这些组合在一起,我们就得到了这个语句,它给出了所有被阻塞/保留的房间:

代码语言:javascript
复制
SELECT roomID from tblreservation where 
      (checkin  <=  '$checkout' AND checkin >  '$checkin') 
   OR (checkout >=  '$checkin' AND checkout <  '$checkout') 
   OR (checkin <= '$checkin' AND checkout >= '$checkout')

现在,让我们获取不在此列表中的所有房间:

代码语言:javascript
复制
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')
  )

所有这些都是由你需要调整的虚幻的表格/列名称和类型组成的。

还可以将其转换为准备好的语句。

Here is a working sqlFiddle

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50900321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档