小编典典

需要更新mysql查询以选择日期范围以预订酒店房间或任何东西

sql

我的项目中有一种情况,如下所示。

在检查可用房间时

$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日

需要任何澄清,请问我。

谢谢。


阅读 266

收藏
2021-04-22

共1个答案

小编典典

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最后一个日期( 直到 )。

要检查从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'
        )
2021-04-22