我想尝试做的是允许人们输入日期范围,并查找所有“出租”地点,这些地方在用户提供的日期范围之间有开放日期。
我的租借与“预订”有很多关联,其中包含开始和结束日期。
什么是获得每天在该范围内开放的租赁文章的最佳方式。
我可以找到所有预订不会与给定时间重叠的租赁,但这并不代表每一天。因此,如果从9月7日到9月10日进行预订,并且用户进入9月5日至9月9日的范围,则该记录将不会被包括在内,但理论上会有5至7日开放。
我仍然在考虑这个问题,所以我还没有开始编码。但是我要做的是找到所有那些没有预订的租约与提供的日期范围重叠,将它们存储在变量中(因为这些是正确的结果,因为它意味着不是一天重叠)。
然后我会找到所有预订与所提供的日期范围重叠的租赁。然后,我将遍历这些预订,并在其中循环用户提供的日期范围(DateRange.Each)并检查每一天是否在预订日期范围内,一旦一天导致错误价值(意味着至少有一天不重叠)它将结束循环,并将相关的“租赁”文章添加到早期收集的文章中,并且根本没有重叠。
我对这个解决方案唯一的问题是,我觉得它可能不是非常优化或运行良好,我不确定。在最糟糕的情况下,我会有数百个“租赁”,我不知道有多少不同的“预订”。我不认为这样的事情可以在一个SQL查询中完成吗?
Rentals Model
name: string
has_many Bookings
Bookings Model
rental_id: integer
start_date: Date
end_date: Date
用户输入DateRange,我想要所有具有开放日期的租赁(在所提供的范围内没有被“预订”占用。
我一直在想,我认为最好的解决方案是使用postgres db,它允许使用数组。我会将所有预订日期存储在阵列中,而不是存储范围。
Postgres支持检查给定数组中的所有值是否存在于DB中的数组中。因此,我可以检查数据库阵列是否“包含”了“通缉日”数组,如果是,则表示没有任何日期是免费的。