我正在建立一个电子商务网站,并希望在限定时间内提供某些商品的折扣。我想展示我们为每件产品提供多少折扣。因此,我需要每个产品两个值,原始价格和给定持续时间的折扣价格。
这是对answer我问过
的question的后续跟进架构:
产品
ProductPricing
数据:
Product:
1 | Apple
2 | Banana
T1:2011年12月21日:目前没有优惠
ProductPricing
1 | Dec 20, 2011, 00:00 | Jan 1, 2038, 00:00 | 10$ | 10$
2 | Dec 20, 2011, 00:00 | Jan 1, 2038, 00:00 | 20$ | 20$
T2:2011年12月24日:交易!从12月25日14:00 - 12月26日14:00开始,对苹果享受25%的折扣
接近A。 - 查询更新给定持续时间的苹果价格
ProductPricing
1 | Dec 25, 2011, 14:00 | Dec 26, 2011, 14:00 | 7.5$| 10$
2 | Dec 20, 2011, 00:00 | Dec 25, 2038, 00:00 | 20$ | 20$
接近B。 - 查询在给定的持续时间内添加另一条带苹果价格的记录
ProductPricing
1 | Dec 20, 2011, 00:00 | Jan 1, 2038, 00:00 | 10$ | 10$
2 | Dec 20, 2011, 00:00 | Dec 25, 2038, 00:00 | 20$ | 20$
1 | Dec 25, 2011, 14:00 | Dec 26, 2011, 14:00 | 7.5$| 10$
T3:2011年12月27日 - 选项
接近A。 此时,交易已过期,我应该使用触发器重置endTimeStamp吗?
接近B。 我应该删除交易刚过期的产品的最新记录吗?
答案 0 :(得分:7)
ProductPricing
表的设计使我们永远不必删除旧的定价数据(有时管理层需要基于该数据的报告)。根据你上面所描述的,你就是这样开始的(我改变了开始日期,因此很容易找出是的,这是系统启动时的原始价格):
ProductPricing
1 | Jan 1, 1970, 00:00:00 | Jan 1, 2038, 00:00:00 | 10$ | 10$
现在让我们假设您给出了苹果的折扣价,并且您希望积极主动并在销售结束时设置系统:
ProductPricing
1 | Jan 1, 1970, 00:00:00 | Dec 20, 2011, 00:00:00 | 10$ | 10$
1 | Dec 20, 2011, 00:00:01 | Dec 26, 2011, 00:00:00 | 7.5$ | 10$
1 | Dec 26, 2011, 00:00:01 | Jan 1, 2038, 00:00:00 | 10$ | 10$
我们在这里做的是:
endDateTimeStamp
字段以反映销售的开始如果没有重叠的时间戳,当您查询数据库中的价格时,您可以保证获得单个记录。因此,
SELECT p.Name, pp.price, pp.original_price
FROM Product p
INNER JOIN ProductPricing pp ON pp.productId = p.productId
WHERE NOW() BETWEEN pp.startDateTimeStamp AND pp.endDateTimeStamp
会为您提供当前价格的产品清单。