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

标签 php sql mysql

我在我的项目中遇到过如下情况。

在检查可用房间时

$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.")";

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

类似地,第二个从表预订中做同样的事情

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

适用于 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

需要任何说明请问我。

谢谢。

最佳答案

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 这里是第一个日期(from),@req_tdate 是最后一个日期()。

要检查 8 月 16 日8 月 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'
        )

关于php - 需要更新 mysql 查询以选择预订酒店房间或任何东西的日期范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3394723/

相关文章:

php - DELETE 语句不删除行

php - 运行一堆查询后,表不断崩溃

php - 使用 exec() PHP 是否安全

mysql - 如何结合多个 COUNT() 和 GROUP BY 实现 MySQL Query

php - 使用存储在 MySQL DB 中的 PHP 在字符串中添加数字

mysql - 数据库查询跳过 WHERE 子句中的前导数字

php - 如何设置 $_GET 变量

php - 我们是否必须清除 Doctrine2 中两个查询之间的查询生成器?

php - Firebird 上的外键问题

mysql - 多线程访问MySQL错误