【发布时间】:2013-01-27 10:59:39
【问题描述】:
我已经花费了 14 多个小时试图找到一种方法来实现这一点,但没有运气!
我正在开发一个预订系统,我有 2 张桌子:
Rooms
---------
ID - ROOM_TYPE - NAME - ROOM_COUNT
1 1 single room 6
2 2 double room 4
3 3 studio 2
Booking
---------
ID - ROOM_TYPE - Customer_NAME - CHECK_IN - CHECK_OUT
1 3 John A 1-1-2013 4-1-2013
2 3 John B 2-1-2013 5-1-2013
3 2 John C 8-1-2013 9-1-2013
在用户输入 2 个日期来搜索可用房间后,我进行查询以显示我拥有的所有类型房间,我有 3 种类型(单人/双人/工作室),每种类型都有可用的房间数酒店(例:酒店默认有6间单人房)
我最终用这个查询来获取所有可用的房间类型
SELECT *
FROM rooms
where id NOT IN
( SELECT room_type FROM booking
WHERE "'.$check_in.'" <= check_out
AND "'.$check_out.'" >= check_in
)
我需要制定另一个条件,即 WHERE count(room_type) from booking LESS 小于 ROOMS 表中 ROOM_COUNT 字段中保存的值..
取决于上面的桌子结构,酒店只有两个工作室,并且在 2013 年 4 月 1 日都不可用。 因此,当有人在该日期搜索时,查询不应显示工作室类型房间..
我需要计算每种房型的预订数量,然后显示结果..
提前谢谢你
【问题讨论】:
-
无论如何,您的逻辑是有缺陷的 - 如果有人在搜索范围开始后签出特定房间类型,而其他人在搜索范围结束之前签入,那么这两个预订可能是容纳在同一个房间,但您的逻辑会将其视为该期间不可用的两个房间。我认为你可能需要重新考虑......
-
实际上,我正试图用两张桌子尽可能地简化它。如果我在这里没有得到答案,我会尝试其他方法:(,谢谢大卫。跨度>
-
由于可用房间的数量可能每天都在变化,因此您必须在查询中包含一个日期表,以便您可以找到每个日期的可用房间数量。
标签: mysql