【发布时间】:2018-11-08 00:59:30
【问题描述】:
假设您有一个酒店数据库。每家酒店都会在数据库中创建多个价格,每个价格都有from_date 和to_date。保证费率永远不会重叠。
在每个房价中,酒店经理都可以设置该期间的最短停留时间。例如,从 12 月 1 日到 1 月 30 日,最短住宿时间为 10 晚。
现在旅行者输入他的日期,例如,12 月 25 日到 1 月 1 日。在这种情况下,这家酒店应该不在结果中返回,因为从 12 月 1 日到 1 月 30 日的房价规定只欢迎入住至少 10 晚。
我想不出一种查询该数据库的方法(使用 SQL 或 Elasticsearch,这是我们目前的搜索引擎),以避免返回在该日期范围内具有更高最短停留时间的酒店。
在 SQL 中,我将探索一条路径 joining 与费率表的 Hotels 表,使用 WHERE 来获取与旅行者所需日期重叠的费率(可能使用算法 (StartA <= EndB) and (EndA >= StartB)),加上一个像MAX() 这样的聚合函数来获得最大的min_stay 找到的费率,最后是一个HAVING 来指定它应该> 然后是旅行者提供的范围内存在的夜晚数。
但即使这条路对我来说也是模糊的,因为当我加入一个表格时,我会排除没有配置任何价格的酒店,这是不希望的;也许是左外连接?而如何将其转换为 elasticsearch 应该是一个更大的挑战(可能使用此处描述的存储桶聚合之类的东西 https://stackoverflow.com/a/46953947/1290457)
【问题讨论】:
-
您使用哪种方法来确定最短停留时间?留到(所有日期的最大值)还是只留到入住日期?
-
@SalmanA 所有日期的最大值。
标签: mysql sql date elasticsearch