相关疑难解决方法(0)

MySQL选择日期不在日期之间的行

我有一个预订系统,我需要从数据库中选择任何可用的房间.基本设置是:

table: room
columns: id, maxGuests

table: roombooking
columns: id, startDate, endDate

table: roombooking_room:
columns: id, room_id, roombooking_id
Run Code Online (Sandbox Code Playgroud)

我需要选择适合所请客人的房间,或选择两个(或更多)房间以适应客人(由maxGuests定义,显然首先使用最低/壁橱maxGuests)

我可以遍历我的日期范围并使用这个sql:

SELECT `id`
FROM `room` 
WHERE `id` NOT IN
(
    SELECT `roombooking_room`.`room_id`
    FROM `roombooking_room`, `roombooking`
    WHERE `roombooking`.`confirmed` =1
    AND DATE(%s) BETWEEN `roombooking`.`startDate` AND `roombooking`.`endDate`
)
AND `room`.`maxGuests`>=%d
Run Code Online (Sandbox Code Playgroud)

其中%$ 1是循环日期,%2d是要预订的客人数.但如果客人比任何房间都多,那么这将返回false,并且必须有更快的方式来做这个而不是循环用PHP和运行查询?

这类似于我想到的sql的一部分:在一系列日期之间获取日期但是使用Mysql


解决方案,基于ircmaxwell的答案:

$query = sprintf(
        "SELECT `id`, `maxGuests`
        FROM `room`
        WHERE `id` NOT IN
        (
            SELECT `roombooking_room`.`room_id`
            FROM `roombooking_room`
            JOIN `roombooking` ON `roombooking_room`.`roombooking_id` = `roombooking`.`id`
            WHERE `roombooking`.`confirmed` =1
            AND (`roomBooking`.`startDate` …
Run Code Online (Sandbox Code Playgroud)

mysql date

5
推荐指数
1
解决办法
2万
查看次数

标签 统计

date ×1

mysql ×1