让我们说客户订购了3种产品
订购产品表:
id | order_id | product_id | price
1 | 1 | 2 | 10
2 | 1 | 2 | 10
3 | 1 | 2 | 10
订单表:
id | total_price
1 | 30
现在我希望MySql在特定时间段内应用特殊折扣,使第3项免费。所以结果我会得到
id | total_price
1 | 20
我正在使用MySql 5.6,php(symfony 2,doctrine ORM),并想知道创建和处理此类场景的最佳方法是什么。
答案 0 :(得分:0)
要在期间应用折扣,您必须设计代码以支持此功能。设计可能如下所示:
创建折扣表:
CREATE TABLE discount(
discount_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
rule VARCHAR(400),
start_date DATE,
end_date DATE
);
折扣rule
可以是包含说明的JSON字符串。这些说明每次都会有所不同,所以这样你的表总是一样的。
此折扣的JSON的可能结构是:
{"ruleType":"multipleProductDiscount","ruleValue":"3"}
然后,您可以使用CASE
语句在代码中处理时应用不同的折扣规则。
开始/结束日期只是一种防止每次都必须加载和处理所有规则的方法。因此,从discount
表中检索数据的查询仅获取活动数据:
SELECT * FROM discount WHERE somedate BETWEEN start_date AND end_date;