小编典典

mysql检查特定日期和持续时间的酒店房间可用性

sql

我需要帮助来查找查询,以查询特定日期和时间段内酒店房间的可用性。我在下面解释。

表“ hotel_room_book”具有以下列。

CREATE TABLE IF NOT EXISTS `hotel_room_book` (
  `hotel_room_book_id` int(10) NOT NULL AUTO_INCREMENT,
  `hotel_room_id` int(10) NOT NULL,
  `hotel_id` int(10) NOT NULL,
  `who_has_booked` int(10) NOT NULL,
  `booked_for_whom` int(10) NOT NULL,
  `room_price` float(10,2) NOT NULL,
  `book_status` enum('0','1') NOT NULL DEFAULT '0',
  `booking_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `checkin_date` date NOT NULL,
  `checkin_time` int(4) NOT NULL,
  `checkout_date` date NOT NULL,
  `checkout_time` int(4) NOT NULL,
  PRIMARY KEY (`hotel_room_book_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=20 ;

INSERT INTO hotel_room_bookhotel_room_book_id
hotel_room_idhotel_idwho_has_bookedbooked_for_whom
room_pricebook_statusbooking_datecheckin_date
checkin_timecheckout_datecheckout_time)VALUES(1,13,1,1,1,564564.00,
‘0’, ‘2011-06-15 00:00:00’,“2011-06
-15’,3,‘2011-06-17’,12),(2,13,1,1,1,1,564564.00,‘0’,‘2011-06-15
00:00:00’,‘2011-
06-17’,16,‘2011-06-18’,3),(3,13,1,1,1,1,23.00,‘0’,‘2011-06-01
00:00:00’,‘2011 -06-19’,5,‘2011-06-20’,18);

表示已预订room_id 13

slno     checkin_date     checkin_time     checkout_date   checkout_time

 1        15-06-2011      3                 17-06-2011      12

 2        17-06-2011      16                18-06-2011      3

 3        19-06-2011      5                 20-06-2011      18

我在寻找

slno     checkin_date     checkin_time     checkout_date     checkout_time

1         17-06-2011       13                    17-06-2011       15

2        18-06-2011        4                     19-06-2011       4

3        14-06-2011        2                     15-06-2011       1

4        20-06-2011        19                    21-06-2011       2

对于“房间可用”的情况,我使用了以下逻辑:

案例1 :(上面的1,2,3)有空房间

如果需要,checkin_date和checkin_time> =已预订checkout_date和checkout_time

和所需的checkout_date和checkout_time <=已预订的checkin_date和checkint_time

案例2 :(上述所需日期中的4个匹配可用性)

如果需要,checkin_date和checkin_time <=已预订checkin_date和checkin_time

和所需的checkout_date和checkout_time <=已预订的checkin_date和checkint_time

如果手动检查,我的查询是正确的,但记录为零,这是显而易见的。因此,您能否考虑一下并帮助我找出查询,该查询给出特定时间段内特定房间的可用/不可用的二进制结果为是/否或1/0?

简介:假设13号房间是从Dt-15-06-2011的3预订到Dt-17-06-2011的12。

再次从Dt-17-06-2011的16位预订到Dt-18-06-2011的3位预订。这意味着13号房间的可用时间为Dt-17-06-2011的13到Dt-17-06-2011的15的时间。
mysql对其进行编程检查。


阅读 331

收藏
2021-05-16

共1个答案

小编典典

SELECT * FROM hotel_room_book a , hotel_room_book b WHERE a.checkout_date<= 
 $new_checkin_date  AND b.checkin_date >= $new_checkout_date AND a.hotel_id = 
 b.hotel_id AND a.hotel_room_id = b.hotel_room_id ;

而且仅当您将checkin_date和checkout_date设置为TIMESTAMP而不是日期时,此方法才有效,因为分别检查日期和时间将涉及复杂的计算。(希望您理解将日期和时间存储在单独的列中的问题)

2021-05-16