【问题标题】:How to Add incremental offer based on quantity and predefined offer如何根据数量和预定义的报价添加增量报价
【发布时间】:2018-05-29 13:41:05
【问题描述】:

我有一个问题并停留在这个阶段。 根据附图,Offer 需要根据商品代码及其数量自动更新。

假设:商品代码 (1) 有一个数量为 12 的报价(在报价表中)。 (这意味着当 item_code=1 和 quantity=12 时,offer 列将填充值 1)

现在最困难的部分是:

  1. 如果数量小于 12,则报价列为 0
  2. 如果数量等于 12 且小于 24,则报价值为 1
  3. 如果数量等于或大于 24 但低于 36,则报价值为 2,依此类推

订单样本

我提供了一张桌子,看起来像

item_code | quantity | offer
----------|----------|------
1         | 12       | 1
2         | 5        | 1
3         | 8        | 1

非常感谢任何帮助和指导。 谢谢

进一步说明: 当我输入 item_code (1) 和数量 (12) 时,它会自动从 (offers) 表中插入要约。我的意思是报价取决于 item_code 和数量。那时一切都很好。

真正的问题发生在数量改变时。 (如 item_code=1, quantity=12, offer=1 是固定的,根据 item_code 和 quantity 值从 offer_table 中获取,但是当手动更新数量时,offer 值需要分别递增。

我正在尝试创建一个 point_of_sale 并且不在 PhpMyAdmin 中工作。我在基于 Web 的前端环境中工作。我有物品和数量的初始报价值,就像买两个得到一个免费类型的东西。如果有人买了 4 个,他应该免费得到两个,如果 6 个,那么 4 个将是免费的,等等。 有很多项目,每个项目都有不同的数量栏有资格提供。例如 item_code 1 在数量为 12 时将有一件免费物品。 item_code 2 在数量为 5 时将有一件免费物品。 但是当用户更改数量时,即 24 而不是 12 和 10 而不是 5,免费产品应该加倍。

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    Javascript 解决方案

    如果您想在客户端执行此操作,您可以执行以下操作:

    var quantityInput = document.getElementById("quantity");
    var offerInput = document.getElementById("offer");
    
    var offerFloors = [0, 12, 24, 36];
    
    function updateOffer() {
      var offerValue = 0;
      var quantity = quantityInput.value;
      for (var i = 0; i < offerFloors.length; i++) {
        if (quantity > offerFloors[i]) {
          offerValue = i;
        }
      }
      offerInput.value = offerValue;
    }
    <html>
      <input id="quantity" type="number" onChange="updateOffer()"/>
      <input id="offer" type="number"/>
    </html>

    报价输入将在每次数量输入更改时更新。

    SQL解决方案

    如果你愿意做服务器端,你可以这样做:

    简单的一个

    试试这个:

    CREATE TRIGGER before_update_offer BEFORE UPDATE
    ON Offer FOR EACH ROW
    BEGIN
        IF NEW.quantity < 12 THEN
            SET NEW.offer = 0;
        ELSEIF NEW.quantity >= 12 AND NEW.quantity < 24 THEN
            SET NEW.offer = 1;
        ELSEIF NEW.quantity >= 24 AND NEW.quantity < 36 THEN
            SET NEW.offer = 2;
        END IF;
    END
    

    这是一个触发器,每次更新表格的任何行并根据新的数量值设置报价列时都会调用它。

    更高级的

    您可以通过创建优惠代码表来自动执行此行为:

    offer_code | floor
    -----------|------
    0          | 0
    1          | 12
    2          | 24
    3          | 36
    

    然后您的触发器将如下所示:

    CREATE TRIGGER before_update_offer BEFORE UPDATE
    ON Offer FOR EACH ROW
    BEGIN
        DECLARE offer_code, v_offer_code, v_floor INT;
        DEClARE row_cursor CURSOR FOR 
            SELECT offer_code, floor FROM offer_codes;
    
        OPEN row_cursor;
    
        get_offer_code: LOOP
            FETCH row_cursor INTO v_offer_code, v_floor ;
            IF NEW.quantity > v_floor THEN
                SET offer_code = v_offer_code;
            END IF;
        END LOOP get_offer_code;
    
        SET NEW.offer = offer_code;
    
        CLOSE row_cursor;
    END
    

    【讨论】:

    • 感谢您的快速回复,我很感激,但这并不能解决我的问题。让我进一步解释一下。当我输入 item_code (1) 和数量 (12) 时,它会自动从 (offers) 表中插入要约。我的意思是报价取决于 item_code 和数量。那时一切都很好。真正的问题发生在数量改变时。 (即item_code=1,quantity=12,offer=1是固定的,从offers_table中获取,但是手动更新数量时,offer值需要递增。
    • 当您说“手动更新数量”时,您的意思是在 PhpMyAdmin 或类似的工具中?您不是通过查询进行更新吗?
    • 我正在尝试创建一个 point_of_sale 并且不在 PhpMyAdmin 中工作。我在基于 Web 的前端环境中工作。我有物品和数量的初始报价值,就像买两个得到一个免费类型的东西。如果有人买 4 个,他应该免费得到两个,如果 6 个,那么 4 个将是免费的,等等
    • 我认为应该在前端部分通过 ajax+php 或 javascript+php 完成,因此在提交订单之前会立即更新报价
    • 您能发布您的表单代码吗?处理起来会更容易。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    相关资源
    最近更新 更多