有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

搜索“可用酒店房间”的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日是免费的


共 (4) 个答案

  1. # 2 楼答案

    假设你在预订的日期时存储,而不是在它们空闲时存储,那么你就可以在日期范围内的每一天找到当天的空闲房间列表(通过获取总房间列表并减去当天有预订的房间)。然后把这个列表过滤到每天都免费的房间

  2. # 3 楼答案

    上面的逻辑非常正确,但诀窍是数据库不应该存储房间,而是存储房间中的空闲时间跨度,因为每个房间可能有多个跨度,因此每个房间的主表可能包含多个条目

    例如,假设你的桌子上有

     room      start_avail     end_avail
     1         Jan 1           Mar 1
     2         Feb 15          Mar 15
    

    有人订了2月2日至15日的1号房间,现在你

     1        Jan 1            Feb 1
     1        Feb 16           Mar 1
     2        Feb 15           Mar 15
    

    当一个请求进来时,你基本上会将它与数据库中的每个空闲时间跨度进行比较,找到一个在请求的开始日期或之前开始,在请求的结束日期或之后结束的空闲时间跨度。预订后,从数据库中删除时间跨度,并插入未使用的剩余时间跨度(可能是0 1或2,取决于预订的适合程度)

    如果你计划向用户展示所有可能的房间,并让他们选择一个,那么你就完成了。但是,如果你有选择哪一个房间的控制,你需要考虑一个启发式来最好地使用你的房间资源。例如,一个“最适合”的试探总是选择房间,使最小的额外时间未预订,所以1天预订更喜欢2天的自由跨度,而在一个为期两周的跨度中一天,并把它切成两个自由空间。否则,假设3月15日有一间空房,3月全天有一间。如果有预订,它可以使用任何一个房间。但接下来,假设有人来到现场,寻找一个可以容纳整个三月份的房间。如果第一次预订使用了第二个房间,您将无法满足要求

  3. # 4 楼答案

    给出的逻辑看起来确实正确,尽管这是一种奇怪的表达方式

    $date_from TO infinite相当于!总有一天。在($date_from)之前。同样地,$infinite TO date_TO==!总有一天。之后($date_to)

    所以,你需要查看每个房间的预订情况,以确保在4月1日到5月1日之间没有预订。如果在这两个日期之间有预订,房间将不可用