您可能需要构建某种“折扣”表来保存有关折扣的基本信息 - 例如唯一标识符和说明(这也可能与触发此折扣所需的资格规则相关联 - 促销代码示例)。
此表还需要保存为您的示例创建折扣捆绑的规则,例如“触发折扣所需的产品数量”和“捆绑价值” - 为了灵活起见,这些字段应该是 NULLable,以便您不要有使用捆绑包;您可以使用“要打折的产品”表中确定的单个价格。
作为一个基本示例,您可能有一个折扣表,如下所示:
+----+-------------+----------------+--------------+------------+----------+
| id | description | units_required | bundle_price | start_date | end_date |
+----+-------------+----------------+--------------+------------+----------+
| .. + ... | ... | ... | ... | ... |
... 和 product_to_discount 链接表,如:
+----+------------+-------------+----------------+------------+
| id | product_id | discount_id | units_required | unit_price |
+----+------------+-------------+----------------+------------+
| .. | ... | ... | ... | ... |
然后您将产品链接到折扣,因此如果您有类似“只需 10 英镑购买此范围内的任意 3 件商品”之类的内容,则需要将所有可能的合格产品链接到折扣并设置units_required 到 3 - 如果这些项目中的任何 3 个在“篮子”中,则应用 bundle_price。
如果有多种可能性(可能通过计算哪个提供最大折扣),您可能需要进行一些过滤来确定哪个捆绑包优先。
这样设置的另一种可能性是,它还允许您进行更简单的折扣。您可以简单地将units_required 和bundle_price 保留为NULL,并将单个产品链接到折扣;可能会在不同的product_to_discount.units_required 值下多次以不同的价格中断 - 因此您可以为单个产品设置折扣值,或者为更大数量的每件商品设置更大的折扣。
如果您想执行“购买 X、Y 或 Z 并免费获得 Q”之类的操作,还可以添加 product_to_discount.product_is_discount 之类的字段。
这是一个相当模糊的大纲,但我希望它能帮助你指出“正确”的方向......
哦,还有一件事要记住,如果您的系统正在做任何核算,您需要向下传递一条“折扣线”来说明预期产品价格与折扣价格之间的差异。