我有一个问题,并坚持在这个阶段。 根据附图,Offer需要根据商品代码及其数量自动更新。
假设:物品代码(1)有数量12的报价(在报价表中)。 (这意味着当item_code = 1且数量= 12时,商品列将填充值1)
现在困难的部分是:
订购表格样本
我提供了表格,其中看起来像
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时,免费产品应加倍。
答案 0 :(得分:1)
如果您想在客户端进行此操作,可以执行以下操作:
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>
优惠输入将在每次数量输入更改时更新。
如果你愿意在服务器端做,你可以这样做:
试试这个:
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