Php 从下表结构中查找可用的房间数

Php 从下表结构中查找可用的房间数,php,mysql,yii,Php,Mysql,Yii,我有以下表格结构: roominfo表 bookingprogress表为避免截止到到期时间的竞争条件,我将最长到期时间设置为距当前时间15分钟 +------------+----------------+-----------------+----------------+---------+---------------+---------------------+ | room_pg_id | checkinpg_date | checkoutpg_date | maxroomsbook

我有以下表格结构:

roominfo表

bookingprogress表为避免截止到到期时间的竞争条件,我将最长到期时间设置为距当前时间15分钟

+------------+----------------+-----------------+----------------+---------+---------------+---------------------+ | room_pg_id | checkinpg_date | checkoutpg_date | maxroomsbooked | room_id | sessionid | ExpireTime | +------------+----------------+-----------------+----------------+---------+---------------+---------------------+ | 1 | 2014-01-28 | 2014-01-29 | 2 | 1 | AdsddsA23asd | 2014-01-28 00:15:00 | | 2 | 2014-01-29 | 2014-01-30 | 2 | 5 | AdsQWerasdwe | 2014-01-28 00:18:00 | | 3 | 2014-01-28 | 2014-01-29 | 1 | 2 | BdrtQWerasdwe | 2014-01-28 00:20:00 | +------------+----------------+-----------------+----------------+---------+---------------+---------------------+ 工作流程是:

用户通过提供入住日期、退房日期和房间数量来检查可用房间。 我需要找到并显示在特定时间段内未被封锁或预订的可用房间。 执行的查询可能是一些小错误——这里我概述了我所做的工作——因此根据这些修改了我的查询

选择tbook.*, SUMtbook.maxroomsbooked+tprogress.maxroomsbooked作为BookedRoom 从bookedtable作为tbook 使用房间id将bookingprogress作为tprogress加入 使用Room\u id将roominfo加入为troomtype 其中tbook.checkout_日期>'2014-01-28' 和tprogress.checkoutpg_日期>'2014-01-28' 和tprogress.ExpireTime<'2014-01-27 00:10:00' 和tprogress.room_id=1 按房间编号分组 从上面的表格中,我试图找到可以预订的房间。但我没有得到预期的结果

在电视上看

您能给我提供解决方案吗?

一种方法是使用。例如,如果用户有兴趣预订“2014-02-01”至“2014-02-07”:

选择* 来自roominfo r 不存在的地方 挑选* 来自bookedtable b 其中b.room\u id=r.room\u id 而不是 b、 登记日期<'2014-02-07' b.结帐日期>'2014-02-01' 限制1 而且不存在 挑选* 从预订进展 其中p.room\u id=r.room\u id 和p.ExpireTime>CURRENT_TIME 而不是 p、 检查日期<'2014-02-07' 和p.checkoutpg_日期>'2014-02-01' 限制1
你能添加你尝试过的吗?在这里添加你的代码,这可以让我们更好地了解你的情况。你的日期文字的格式是dd-mm-yyy,这在MySQL中不是有效的格式。。。这仅仅是一个印刷错误,还是你真的以这种格式将日期存储为字符串?@eggyal这是一个示例。实际上它是以YYYY-dd-mm格式存储的。这没有语法错误。好的。我想我已经修改了你的样品,这样它现在就有意义了——如果我错了,一定要纠正它。在进一步研究之前,一个直接的评论是,您可能希望使用bookedtable和bookingprogress的联合体,而不是它们之间的连接……我怀疑它是否会返回正在进行输入的房间以及同时具有两个输入的预订示例a的行,但该房间仍然可以预订,它是否会返回该行 +------------+--------------+---------------+----------------+---------+ | room_bk_id | checkin_date | checkout_date | maxroomsbooked | room_id | +------------+--------------+---------------+----------------+---------+ | 1 | 2014-01-28 | 2014-01-29 | 8 | 1 | | 2 | 2014-01-29 | 2014-01-30 | 2 | 4 | | 3 | 2014-01-28 | 2014-01-29 | 4 | 1 | +------------+--------------+---------------+----------------+---------+ +------------+----------------+-----------------+----------------+---------+---------------+---------------------+ | room_pg_id | checkinpg_date | checkoutpg_date | maxroomsbooked | room_id | sessionid | ExpireTime | +------------+----------------+-----------------+----------------+---------+---------------+---------------------+ | 1 | 2014-01-28 | 2014-01-29 | 2 | 1 | AdsddsA23asd | 2014-01-28 00:15:00 | | 2 | 2014-01-29 | 2014-01-30 | 2 | 5 | AdsQWerasdwe | 2014-01-28 00:18:00 | | 3 | 2014-01-28 | 2014-01-29 | 1 | 2 | BdrtQWerasdwe | 2014-01-28 00:20:00 | +------------+----------------+-----------------+----------------+---------+---------------+---------------------+