これがトリガーの目的です。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' )