2013-04-23 3 views
0

J'essaye d'écrire un déclencheur de mysql pour mettre à jour un champ basé sur la valeur d'autres champs dans la même table.Besoin d'aide sur Mysql Trigger

J'ai une table avec 3 champs de cases à cocher à savoir checkbox_1, checkbox_2, checkbox_3. J'ai un autre champ qui est le 4ème champ, j'ai besoin de mettre à jour le champ "status_status" basé sur la valeur présente dans la valeur checkbox1/2/3. Je veux mettre à jour le status_status comme 1 si toutes les valeurs de checkbox sont 1.Below est ce que j'essaye de faire.

delimiter $$ 
create trigger emp_final_status 
after update on tester.status_master 
for each row 
begin 
if checkbox_1 = '1' and checkbox_2= '1' and checkbox_3= '1' 
then 
update tester.status_master set status_status=1; 
END IF; 
END 
+1

Utiliser déclencheur 'avant update' puis au lieu de' 'mise à jour ... juste ne' Nouv régl. status_status = 1'. Mais cette logique appartient-elle vraiment à la base de données? – eggyal

Répondre

0

Lorsque se référant aux champs de la ligne étant mise à jour, utilisez vieux pour se référer à la valeur avant le changement et nouveau pour se référer à la valeur après le changement:

delimiter $$ 
create trigger emp_final_status 
BEFORE update on tester.status_master 
for each row 
begin 
if NEW.checkbox_1 = '1' and NEW.checkbox_2= '1' and NEW.checkbox_3= '1' 
then 
    set NEW.status_status=1; 
END IF; 
END 

J'ai aussi changé le déclencheur d'APRÈS AVANT. Dans le déclencheur BEFORE, vous pouvez affecter les valeurs mises à jour.

Et j'ai changé votre code dans la condition. Là, votre code d'origine était:

update tester.status_master set status_status=1; 

Ceci est une déclaration update sans une clause where, ce qui signifie, vous demandez set status_status=1 pour toutes les lignes dans votre table!

Au lieu de cela, vous voulez seulement changer les choses à la seule ligne en cours de traitement au moment:

set NEW.status_status=1;