我正在研究用MySQL / PHP编写的库存/发票系统(可能带有某种Access前端和Web界面)。
问题在于我希望产品库存能够应对具有倍数折扣的商品,例如“任意两个10英镑”。我想要发生的是,如果将10个项目添加到发票中,如果其中任何一个项目符合“任何x for£x”要求并应用折扣,则可以解决问题。增加的复杂性是任何项目都可以有不同的多个折扣,例如“任何2英镑10英镑”以及“任何3英镑12英镑”。基本上就像超市一样 - 对最终用户来说很容易。
如果我想要在同一发票行中输入任何相同的x项,但它需要比这更灵活。
有没有人对如何做到这一点有任何想法?提前致谢。我很擅长使用HTML / MySQL / PHP / JavaScript等。
答案 0 :(得分:0)
使用PHP和MySQL,您可以在“折扣”表中保存产品的ID,产品的数量,价格和商品名称。 通过这种方式,通过简单的查询,当您计算发票的最终值时,如果存在每种产品的报价,则根据表格进行检查:
SELECT * FROM discounts WHERE product_id = x AND quantity >= y
因此,最后,您有一个产品和价格表以及相关的优惠表。
答案 1 :(得分:0)
我会创建一个代表各种折扣的对象(我将使用C#语法)
public interface IOrderProcessor
{
bool CanBeApplied(OrderItem item);
void Apply(OrderItem item);
}
public class TwoForOneProcessor : IOrderProcessor
{
public bool CanApply(OrderItem item)
{
// check if the product is in 2 for 1 discount
}
public void Apply(OrderItem orderItem)
{
// apply the discount
}
}
和订单处理器,它将获取所有折扣对象并按顺序将其应用于项目。处理器的数据可以存储在数据库中(即它可以应用于哪个产品等)
答案 2 :(得分:0)
您可能需要构建某种“折扣”表,其中包含折扣的基本信息 - 例如唯一标识符和说明(这也可能与触发此折扣所需的资格规则相关联 - 促销代码例子)。
此表还需要保存用于创建折扣捆绑包的规则,以便您的示例正常工作,例如“触发折扣所需的产品数量”和“捆绑值” - 为了灵活性,这些字段应该是NULLable,以便您不要 使用捆绑包;您可以使用“产品折扣”表中确定的单个价格。
作为一个基本示例,您可能有一个折扣表,如:
+----+-------------+----------------+--------------+------------+----------+
| id | description | units_required | bundle_price | start_date | end_date |
+----+-------------+----------------+--------------+------------+----------+
| .. + ... | ... | ... | ... | ... |
...和product_to_discount链接表如:
+----+------------+-------------+----------------+------------+
| id | product_id | discount_id | units_required | unit_price |
+----+------------+-------------+----------------+------------+
| .. | ... | ... | ... | ... |
然后,您可以将产品与折扣联系起来,因此,如果您有“从此范围内购买任何3件商品只需10英镑”,您需要将所有可能符合条件的产品链接到折扣并设置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
之类的字段。
这是一个相当模糊的大纲,但我希望它有助于指出你在“正确”的方向......
哦,另外要注意的是,如果您的系统正在进行任何会计处理,您需要通过“折扣线”来解释预期产品价格与折扣价格之间的差异。