【发布时间】:2013-03-21 16:49:58
【问题描述】:
我遇到了一个非常复杂的产品/可用性问题,我无法解决,而且我在任何地方都没有找到任何类似的问题。
表格“产品”:
- 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 || 价格: 100 ## 包含在上述期间 (2) 中
第 4 期)开始:2013-01-10 || 结束:2013-01-14 || 价格: 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) 价格。
任何帮助将不胜感激。
【问题讨论】:
-
您是否曾经考虑过可能合并的两个以上范围?
-
是的,类似 2013/01/01-2013/01/02 + 2013/01/02-2013/01/03 + 2013/01/03-2013/01/07 应该匹配搜索2013/01/01-2013-01-07