我的项目中有一种情况,如下所示。
在检查可用房间时
$sel_from_bookings="SELECT room_no FROM `booking` WHERE (('".$_POST['req_tdate']."' BETWEEN check_indate AND check_outdate) OR ('".$_POST['req_fdate']."' BETWEEN check_indate AND check_outdate)"; $sel_from_reserv="SELECT room_no FROM `reservation` WHERE (('".$_POST['req_tdate']."' BETWEEN check_indate AND check_outdate) OR ('".$_POST['req_fdate']."' BETWEEN check_indate AND check_outdate))"; $sel_rooms="SELECT room_no FROM rooms WHERE room_no NOT IN (".$sel_from_bookings.") AND room_no NOT IN (".$sel_from_reserv.")";
第一个查询从满足日期范围的预订表中检索房间号列表
类似地,第二个从餐桌预订上做同样的事情
最后一个查询使用上面两个查询提供的列表,并获取不在生成的列表中的房间列表。
可以在2010年10月8日/ 2010年8月15日正常工作
在20-08-2010 / 25-08-2010可以正常工作
当我给出10到15之间的日期时,它对于20到25同样有效,并且对于14-14-2010和21-08-2010也可以正常工作
但不适用于2010年6月16日至2010年8月19日
需要任何澄清,请问我。
谢谢。
SELECT * FROM room WHERE room_no NOT IN ( SELECT room_no FROM booking WHERE check_outdate >= @req_fdate AND check_indate <= @red_tdate ) AND room_no NOT IN ( SELECT room_no FROM reservation WHERE check_outdate >= @req_fdate AND check_indate <= @red_tdate )
请注意顺序或参数:@req_fdate这是这里的第一个日期( 从 ),@req_tdate最后一个日期( 直到 )。
@req_fdate
@req_tdate
要检查从Aug 16到的可用性Aug 19,请使用以下命令:
Aug 16
Aug 19
SELECT * FROM room WHERE room_no NOT IN ( SELECT room_no FROM booking WHERE check_outdate >= '2010-08-16' AND check_indate <= '2010-08-19' ) AND room_no NOT IN ( SELECT room_no FROM reservation WHERE check_outdate >= '2010-08-16' AND check_indate <= '2010-08-19' )