MySql如何自动应用折扣?

时间:2016-01-01 17:57:09

标签: php mysql symfony doctrine-orm

让我们说客户订购了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),并想知道创建和处理此类场景的最佳方法是什么。

1 个答案:

答案 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;