这就是触发器的作用,我还要讲DATE_SUB和日期间隔
使用触发器可以让您将当前价格保存在价格表中,并将历史价格保存在单独的表中。
例如,考虑创建一个名为 price_table_old 的新表
price_table_old:
price_id int
item_id int
price_amount float
change_date date
在 price_table 上,创建一个“更新”触发器...
insert into price_table_old ( `item_id`, `price_amount` , `change_date ` )
VALUES ( OLD.`item_id` , OLD.`price_amount` , NOW() )
为了帮助您了解触发器语法,我复制了下面用于人员表的触发器
当有人更改价格时,price_table_old 表会自动更新。
从这里开始,获取当前价格和之前价格的比较会更符合逻辑。
您可以运行类似...的查询。
SELECT
price_table.item_id ,
price_table.price_amount ,
(price_table.price_amount - price_table_old.price_amount ) AS pricediff ,
price_table_old.change_date
FROM
price_table
LEFT JOIN
price_table_old ON price_table_old.item_id = price_table.item_id
ORDER BY price_table.item_id , price_table_old.change_date DESC
或在其中粘贴特定项目和/或日期范围和/或限制以获得最后(例如)3 次价格变化的区域。
例如,要获取过去 3 天所有商品的价格变化列表,您可以使用这样的语句
SELECT
price_table.item_id ,
price_table.price_amount ,
(price_table.price_amount - price_table_old.price_amount ) AS pricediff ,
price_table_old.change_date
FROM
price_table
LEFT JOIN
price_table_old ON price_table_old.item_id = price_table.item_id
WHERE
price_table_old.change_date > ( DATE_SUB( NOW() , INTERVAL 3 DAY ))
ORDER BY price_table.item_id , price_table_old.change_date DESC
这是我的员工表触发器...
CREATE TRIGGER `Staff-CopyOnUpdate` BEFORE UPDATE ON `staff`
FOR EACH ROW insert into staff_old
( `sid` , `title`, `firstname` , `surname` , `type`,
`email` , `notify`, `actiondate`, `action` )
VALUES
( OLD.`sid` , OLD.`title`, OLD.`firstname` , OLD.`surname` , OLD.`type`,
OLD.`email` , OLD.`notify`, NOW() , 'updated' )