搜索“可用酒店房间”的java逻辑需要帮助
假设你有一个网站供用户搜索“出租酒店房间”
我不知道当前系统的逻辑是如何工作的,这就是为什么我要问你们
我目前在表单中有两个字段:
Date available from: //example 2010-04-01 // 1st april 2010
Date available to: //example 2010-05-01 // 1st may 2010
那就投降吧
我的问题来了: 我的搜索引擎名为“Solr”,它的搜索方式如下:
dateFrom:[$date_from TO *] AND dateTo:[* TO $date_to]
// $date_from and $date_to = the date inputted by the user in the html form
上面将搜索所有匹配项where $date_from TO infinite AND infinite TO $date_to.
对吗?我个人不这么认为
这种逻辑在预订网站上是如何工作的
如果你需要更多信息,请告诉我! 谢谢
更新:
顺便说一句,每当用户指定“出租房间”时,他们都会指定一个范围,例如从3月1日到4月1日
同样作为一个例子: 假设我们有一个房间,从4月1日到5月1日是免费的
# 1 楼答案
最近参与了一个类似的项目,我认为这真的会有帮助:
http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/PHP_Databases/A_2467-Room-Availability-Check-For-Hotel-Motel-Guest-House-Etc.html
# 2 楼答案
假设你在预订的日期时存储,而不是在它们空闲时存储,那么你就可以在日期范围内的每一天找到当天的空闲房间列表(通过获取总房间列表并减去当天有预订的房间)。然后把这个列表过滤到每天都免费的房间
# 3 楼答案
上面的逻辑非常正确,但诀窍是数据库不应该存储房间,而是存储房间中的空闲时间跨度,因为每个房间可能有多个跨度,因此每个房间的主表可能包含多个条目
例如,假设你的桌子上有
有人订了2月2日至15日的1号房间,现在你
当一个请求进来时,你基本上会将它与数据库中的每个空闲时间跨度进行比较,找到一个在请求的开始日期或之前开始,在请求的结束日期或之后结束的空闲时间跨度。预订后,从数据库中删除时间跨度,并插入未使用的剩余时间跨度(可能是0 1或2,取决于预订的适合程度)
如果你计划向用户展示所有可能的房间,并让他们选择一个,那么你就完成了。但是,如果你有选择哪一个房间的控制,你需要考虑一个启发式来最好地使用你的房间资源。例如,一个“最适合”的试探总是选择房间,使最小的额外时间未预订,所以1天预订更喜欢2天的自由跨度,而在一个为期两周的跨度中一天,并把它切成两个自由空间。否则,假设3月15日有一间空房,3月全天有一间。如果有预订,它可以使用任何一个房间。但接下来,假设有人来到现场,寻找一个可以容纳整个三月份的房间。如果第一次预订使用了第二个房间,您将无法满足要求
# 4 楼答案
给出的逻辑看起来确实正确,尽管这是一种奇怪的表达方式
$date_from TO infinite相当于!总有一天。在($date_from)之前。同样地,$infinite TO date_TO==!总有一天。之后($date_to)
所以,你需要查看每个房间的预订情况,以确保在4月1日到5月1日之间没有预订。如果在这两个日期之间有预订,房间将不可用