我正在使用CMS系统,并使用一种将表格字段插入到表格中的smartform。更改已插入表格字段的值
在这些领域是产品名称,数量和成本。
成本和产品名称取自产品表,而数量是手动输入。
我知道这不是最好的架构,但我受限于我正在使用的系统。
我想要做的是改变插入后的成本值,以数量*成本。
这样做最简单的方法是什么?
我正在使用CMS系统,并使用一种将表格字段插入到表格中的smartform。更改已插入表格字段的值
在这些领域是产品名称,数量和成本。
成本和产品名称取自产品表,而数量是手动输入。
我知道这不是最好的架构,但我受限于我正在使用的系统。
我想要做的是改变插入后的成本值,以数量*成本。
这样做最简单的方法是什么?
如果你的双手系得太紧以至于无法更改表格结构,那么你可能无法使用触发器,但是无论如何。
这是一个示例的表结构:
DROP TABLE IF EXISTS `products`;
CREATE TABLE `products` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`product` VARCHAR(255),
`quantity` INT(11) NOT NULL,
`cost` DECIMAL(6,2) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
创建触发器,它被插入到products
表之前更新成本:
DELIMITER //
DROP TRIGGER IF EXISTS update_cost//
CREATE TRIGGER update_cost BEFORE INSERT ON products
FOR EACH ROW BEGIN
SET NEW.cost = NEW.cost * NEW.quantity;
END;
//
DELIMITER ;
插入几个产品进入表:
INSERT INTO `products` (`product`, `quantity`, `cost`) VALUES
('Acme portable hole', 10, 20),
('Acme jet pack', 1000, 2);
成本自动更新:
SELECT * FROM prodcuts;
+----+--------------------+----------+---------+
| id | product | quantity | cost |
+----+--------------------+----------+---------+
| 1 | Acme portable hole | 10 | 200.00 |
| 2 | Acme jet pack | 1000 | 2000.00 |
+----+--------------------+----------+---------+
您可以插入后运行UPDATE
,使用新产品的标识字段:
UPDATE products
SET cost = cost * quantity
WHERE product_id = @productId
要改变一个行:
update TheTable
set cost = quantity * cost
where pk = 123
如果你运行这个多次,成本将爆炸;-)
+1很好的警告:) – sarnold 2010-07-03 08:31:55
为什么要这样做?它违反了良好DB设计的原则,并且是绝对的罪。 – 2010-07-03 08:32:38
你有没有看到我说我明白这个问题? – Jacob 2010-07-03 17:51:04