【问题标题】:Inventory database for point of sale (any x for £x)销售点库存数据库(任何 x 对应 £x)
【发布时间】:2012-04-09 20:56:23
【问题描述】:

我正在开发一个用 MySQL/PHP 编写的库存/发票系统(可能带有某种 Access 前端以及 Web 界面)。

问题在于,我希望产品库存能够处理具有倍数折扣的商品,例如“10 英镑任意两件”。我想要发生的是,如果在发票中添加 10 件商品,则可以确定这些商品中的任何一件是否符合“x 英镑的任何 x”要求并应用折扣。更复杂的是,任何商品都可能有不同的多重折扣,例如“10 英镑任意 2 个”以及“12 英镑任意 3 个”。基本上就像超市所做的一样 - 对最终用户来说很容易。

如果我想在同一发票行中输入任何 x 相同的项目,它可以正常工作,但它需要比这更灵活。

有人对我如何做到这一点有任何想法吗?提前致谢。我很擅长 HTML / MySQL / PHP / JavaScript 等。

【问题讨论】:

    标签: php mysql database inventory


    【解决方案1】:

    您可能需要构建某种“折扣”表来保存有关折扣的基本信息 - 例如唯一标识符和说明(这也可能与触发此折扣所需的资格规则相关联 - 促销代码示例)。

    此表还需要保存为您的示例创建折扣捆绑的规则,例如“触发折扣所需的产品数量”和“捆绑价值” - 为了灵活起见,这些字段应该是 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_requiredbundle_price 保留为NULL,并将单个产品链接到折扣;可能会在不同的product_to_discount.units_required 值下多次以不同的价格中断 - 因此您可以为单个产品设置折扣值,或者为更大数量的每件商品设置更大的折扣。

    如果您想执行“购买 X、Y 或 Z 并免费获得 Q”之类的操作,还可以添加 product_to_discount.product_is_discount 之类的字段。

    这是一个相当模糊的大纲,但我希望它能帮助你指出“正确”的方向......

    哦,还有一件事要记住,如果您的系统正在做任何核算,您需要向下传递一条“折扣线”来说明预期产品价格与折扣价格之间的差异。

    【讨论】:

      【解决方案2】:

      我将创建一个表示各种折扣的对象(我将使用 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
         }
      }
      

      还有一个订单处理器,它将获取所有折扣对象并将其按顺序应用于项目。处理器的数据可以存储在数据库中(即它可以应用于哪个产品等)

      【讨论】:

        【解决方案3】:

        使用 PHP 和 MySQL,您可以有一个“折扣”表,您可以在其中保存产品 ID、产品数量、价格和报价名称。 这样,通过一个简单的查询,当您计算发票的最终价值时,您可以对照表检查每种产品的报价是否存在:

        SELECT * FROM discounts WHERE product_id = x AND quantity >= y

        所以,最后,您有一个产品和价格表以及一个相关的报价表。

        【讨论】:

          猜你喜欢
          • 2012-04-19
          • 2011-12-24
          • 2015-10-11
          • 2020-12-25
          • 2018-03-31
          • 2019-12-15
          • 2014-10-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多