我正在使用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