我遇到了一个非常复杂的产品/可用性问题,我无法解决,而且我在任何地方都没有找到任何类似的问题。
表“产品”:
- id
- name
表“期”:
- id
- start (Date)
- end (Date)
- price (int)
- product_id
在我的情况下,一个产品可以与多个时期相关联,即使在相同的日期范围内(开始/结束)。
示例:对于产品“ A ”
期间 1)开始: 2013-01-01 || 结束: 2013-01-07 || 价格:200
期间 2)开始: 2013-01-07 || 结束: 2013-01-14 || 价格:250
期间 3)开始: 2013-01-07 || 结束: 2013-01-10 || price : 100 ## 包含在上述期间(2)中
期间 4)开始: 2013-01-10 || 结束: 2013-01-14 || price : 200 ## 包含在上面的期间(2)中
第 5 期)开始:2013-01-11 || 结束: 2013-01-14 || 价格: 150 ## 包含在上述期间(2)中
我需要做的是检索给定日期范围内的所有产品及其价格。
用户会搜索什么,以及我想要获得什么:
搜索 2013-01-01 和 2013-01-07 之间的产品:它应该返回产品A和 200 的价格(周期 1)。
在2013-01-02和 2013-01-07之间搜索:它不应该返回产品A,因为没有完全包含期间(缺少 2013-01-01 天)。
在 2013-01-07 和 2013-01-14 之间搜索(最复杂的情况):它应该返回产品A,有“两个”可能的时期:(2)和(3 + 4)。但它不应该返回期间(3+5),因为 2013-01-10 天有一个“洞”。
我也希望能够检索到最低价格。在上面的第三种情况下,它应该返回 250,因为 (2) 价格低于 (3+4) 价格。
任何帮助都会非常感激。