如何根据数量和预定义的报价添加增量报价

时间:2018-05-28 21:15:57

标签: php mysql

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

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

现在困难的部分是:

  1. 如果数量小于12,则为商品列
  2. 如果数量等于12且小于24,则报价值为1
  3. 如果数量等于24或更大但低于36,则商品价值将为2,依此类推
  4. 订购表格样本

    enter image description here

    我提供了表格,其中看起来像

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

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

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

    数量变更时会出现实际问题。 (例如item_code = 1,quantity = 12,offer = 1是固定的,并根据items_code和quantity值从offers_table中提取,但是当手动更新数量时,需要分别递增商品值。

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

1 个答案:

答案 0 :(得分: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