如何通过添加和减去带有时间戳的字段来更新数量字段? [英] How do I update a qty field from adding and subtracting fields with timestamps?

查看:42
本文介绍了如何通过添加和减去带有时间戳的字段来更新数量字段?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有三张桌子:

CREATE TABLE cartons_current (
    part_no varchar(20) NOT NULL PRIMARY KEY,
    qty INT(8) NOT NULL,
    qty_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE cartons_added
    part_no VARCHAR(20) NOT NULL PRIMARY KEY,
    add_qty INT(8) NOT NULL,
    add_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE cartons_pulled (
    part_no VARCHAR(20) NOT NULL PRIMARY KEY,
    pull_qty INT(8) NOT NULL,
    pull_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

我首先在 cartons_current 中创建一个新记录,在part_no"和qty"列中插入值.

I first create a new record in cartons_current inserting values in the "part_no" and "qty" columns.

接下来,我稍后需要使用另外两个用于添加和拉取的列从qty"中添加或拉取(减去).

Next, I later need to add or pull (subtract) from "qty" using two other columns for adding and pulling.

如何让qty"显示cartons_ addedcartons_pulled 的最新结果?

How do I make "qty" show the latest result from cartons_added and cartons_pulled?

我还需要对每个新的、添加的和拉取的进行时间戳.

I also need to timestamp each new, add and pull.

推荐答案

这个问题有trigger写满了:

DELIMITER $$

CREATE TRIGGER ai_cartons_added_each AFTER UPDATE ON cartons_added 
FOR EACH ROW
BEGIN
  UPDATE cartons_current cc SET cc.qty = cc.qty + NEW.qty_added - OLD.qty_added;
END $$

DELIMITER ;

如果你按照@Michael的建议把所有数据放在一张表中,你可以让MySQL来计算current_qty:

If you follow @Michael's advice and put all data in one table, you can let MySQL do the calculation for the current_qty:

DELIMITER $$

CREATE TRIGGER ai_cartons_each BEFORE UPDATE ON cartons 
FOR EACH ROW
BEGIN
  SET new.current_qty = old.current_qty 
                      + (new.qty_added - old.qty_added)
                      - (new.qty_pulled - old.qty_pulled);
END $$

DELIMITER ;

在 BEFORE UPDATE 触发器中,您可以更改值,因此您可以在其中执行时间戳魔术,您可以存储上次更改.

In a BEFORE UPDATE trigger you can change the values, so you can do your timestamp magic in those, you you store the last change.

CREATE TRIGGER ai_cartons_each BEFORE UPDATE ON cartons 
FOR EACH ROW
BEGIN
  IF new.qty_added <> old.qty_added THEN 
    SET new.added_timestamp = NOW();
  END IF;
END $$

DELIMITER ;

这篇关于如何通过添加和减去带有时间戳的字段来更新数量字段?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆