2013-08-06 2 views
1

Essayer de créer un champ dans une table qui obtiendra l'ancienne valeur d'un autre champ. Mon tableau est très similaire à ceci:Champ d'historique dans la base de données MySQL

------------ -------------------- ------------------------ 
| id int(10) | price decimal(5,2) | price_old decimal(5,2) | 
---------------------------------------------------------- 

Ce que je suis en train de faire est la valeur du champ price pour obtenir copié dans price_old champ ON UPDATE de l'enregistrement en cours.

Est-il possible de réaliser cela uniquement avec mysql?

PS: Les données contenues dans cette cellule ne sont pas critiques. L'utilisation est de stocker le prix précédent d'un article et après pour pouvoir montrer comment il a changé. Je n'aurai besoin que de la dernière valeur, pas de l'historique complet de l'entrée de la table. (Mon serveur MySQL est 5.0, si cela est important)

+1

Désolé, je vais modifier. Je voulais dire le champ 'price' dans le champ' price_old' –

Répondre

1

Utilisez la règle de mise à jour triggers. Il mis en valeur des prix à price_old

CREATE TRIGGER `update_price_old` 
    BEFORE UPDATE ON `table_name` FOR EACH ROW 
    BEGIN 
    UPDATE `table_name` SET price_old = OLD.price where OLD.id = id; 
    END 
+0

fr mon commentaire à la réponse @ DwB :) –

+0

Vérifiez maintenant. Mis à jour avec l'échantillon. (NB: NON TESTÉ) –

4

Oui, vous pouvez utiliser un déclencheur BEFORE UPDATE (documentation).

Je pense que cette syntaxe est correcte mais que vous n'avez pas utilisé MySQL depuis un moment, vous devrez peut-être jouer avec. Si ce n'est pas le cas et que vous le faites fonctionner, faites le moi savoir pour que je puisse l'éditer.

DELIMITER $$ 
CREATE TRIGGER `price_trigger` 
BEFORE UPDATE ON `products` 
FOR EACH ROW 
BEGIN 
    IF NEW.price != OLD.price 
     SET price_old = OLD.price; 
    END IF; 
END$$ 
DELIMITER ; 
Questions connexes