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

sri*_*vas 5 php 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.")";
Run Code Online (Sandbox Code Playgroud)

第一个查询从预订表中检索满足日期范围的房间号列表

类似地,第二个与表预约相同

最后一个查询使用上述两个查询提供的列表,并获取不在生成列表中的房间列表.

适用于10-08-2010/15-08-2010

适用于20-08-2010/25-08-2010

当我给出10到15之间的日期时,它同样适用于20和25,并且在14-08-2010和21-08-2010的日期也可以正常工作

但不适用于16-08-2010至19-08-2010

需要任何澄清请问我.

谢谢.

Qua*_*noi 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
        )
Run Code Online (Sandbox Code Playgroud)

注意顺序或参数:@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'
        )
Run Code Online (Sandbox Code Playgroud)