选择两个日期之间的可用房间
Posted
技术标签:
【中文标题】选择两个日期之间的可用房间【英文标题】:Select available rooms between two dates 【发布时间】:2010-10-02 14:39:13 【问题描述】:我有上面的 mysql 表,上面有可用的日期和价格。第二张表包括房间详细信息。如何连接两个表以获得两个日期之间的可用房间而不是重复的内容。
【问题讨论】:
【参考方案1】:这里很难为您提供完整的答案,因为您只向我们展示了包含预订的表格 - 我们无法知道有哪些房间可供选择。
返回至少在所选时间段内预订的房间的 room_id 的 SQL 可能是:
SELECT `room_id` , COUNT(*)
FROM `bookings`
WHERE `dt` BETWEEN "[start date]" AND "[end date]"
GROUP BY `room_id`;
如果您有一张房间表(而不是预订),您可以返回在此期间未预订的所有房间的列表:
SELECT `id`
FROM `rooms`
WHERE `id` NOT IN (
SELECT DISTINCT( `room_id` )
FROM `bookings`
WHERE `dt` BETWEEN "[start date]" AND "[end date]"
);
修正
根据 OP 的反馈,现在的假设是:
该表包含从dt
列中的日期开始到次日结束的可用房间的详细信息(即酒店房间)
查询应返回可用于输入的整个期间的所有房间(因此只会返回从 DAY A 到 DAY B 可用的房间。
因此,修改后的代码为:
SELECT room_id
FROM available_rooms
WHERE dt BETWEEN "[start date]" AND DATE_SUB("[end date]",INTERVAL 1 DAY)
GROUP BY room_id
HAVING COUNT(*)=ABS(DATEDIFF("[start date]","[end date]"));
【讨论】:
抱歉,上表仅提供可用日期,第二表包含房间详情。 谢谢卢卡诺斯。它的效果非常好。我修改加入房间表的详细信息,现在看起来像这样: SELECT ,room_id FROM availability LEFT JOIN rooms ON availability.room_id=rooms.id WHERE active='1' AND city='".$_REQUEST[' city']."' AND dt BETWEEN '".$_REQUEST['from']."' AND DATE_SUB('".$_REQUEST['to']."',INTERVAL 1 DAY) GROUP BY room_id HAVING COUNT()=ABS(DATEDIFF('".$_REQUEST['from']."','".$_REQUEST['to']."')) - 我希望没问题。 乐于助人。但我会重复一个警告,你会在这里一次又一次地听到这样的警告——确保你清理了你在 SQL 语句中使用的任何参数,以防止 SQL 注入攻击等。快速谷歌搜索“SQL Injection MySQL php” ” 并阅读一些教程 - 它会在未来为您节省很多痛苦。 谢谢。我刚开始使用 OOP,现在我使用的是 ricocheting.com/code/php/mysql-database-class-wrapper-v3,我必须说它真的很棒。再次求助,不知道说什么好了。如果我能以某种方式提供帮助,请告诉我!!!【参考方案2】:SELECT available.* , rooms.* FROM available, rooms
WHERE available.room_id = rooms.room_id AND
available.dt BETWEEN '2005-01-01' AND '2005-12-31'
【讨论】:
【参考方案3】:假设您向我们展示的表格名为rooms_dates
,还有另外两个表格rooms
和room_details
:
select room.id, room_details.xxxxxxx from rooms
inner join room_details on rooms.id = room_details.room_id
where rooms.id in
(
select distinct room_id from rooms_dates
where dt >= 'xxxx-xx-xx' and dt <= 'yyyy-yy-yy'
);
【讨论】:
以上是关于选择两个日期之间的可用房间的主要内容,如果未能解决你的问题,请参考以下文章