我需要帮助来查找查询,以查询特定日期和时间段内酒店房间的可用性。我在下面解释。
表“ 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_book (hotel_room_book_id, hotel_room_id,hotel_id, who_has_booked,booked_for_whom, room_price,book_status, booking_date,checkin_date, checkin_time,checkout_date, checkout_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);
hotel_room_book
hotel_room_book_id
hotel_room_id
hotel_id
who_has_booked
booked_for_whom
room_price
book_status
booking_date
checkin_date
checkin_time
checkout_date
checkout_time
表示已预订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
如果手动检查,我的查询是正确的,但记录为零,这是显而易见的。因此,您能否考虑一下并帮助我找出查询,该查询给出特定时间段内特定房间的可用/不可用的二进制结果为是/否或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对其进行编程检查。
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而不是日期时,此方法才有效,因为分别检查日期和时间将涉及复杂的计算。(希望您理解将日期和时间存储在单独的列中的问题)