2012-11-18 5 views
1

j'ai 3 tables, tbl_image, tbl_vehicle_image et tbl_vehiclerejoindre dans la commande de mise à jour de déclenchement

tbl_vehicle_image résout plusieurs-plusieurs entre tbl_image et tbl_vehicle

tbl_vehicle a une LAST_MODIFIED_DATE

Comment puis-je créer un déclencheur qui, lorsque je change par exemple tbl_image.img_lnk, utilise tbl_vehicle_image pour trouver tous les enregistrements de tbl_vehicle qui utilisent cette image, et définit leur last_modified_date sur NOW()?

Répondre

1

Vous pouvez le faire:

DELIMITER $$; 

create TRIGGER UpdateLastmodifiedDate AFTER UPDATE ON tbl_image 
FOR EACH ROW 
BEGIN 
    UPDATE tbl_vehicle v 
    INNER JOIN tbl_vehicle_image vi ON v.vehicleId = vi.vehicleID 
    INNER JOIN tbl_image i ON vi.imageid = i.id 
    SET v.lastmodified_date = NOW() 
    WHERE i.img_lnk = NEW.img_lnk; 
END$$ 
+0

Je posterai le sien puisqu'il discute de cette réponse, j'ai ajouté DELIMITER $$ en haut et ai mis un point-virgule sur la dernière ligne (OERE je .....) et les problèmes de syntaxe sont partis –

+0

oui, juste obtenu ça va, fonctionne à merveille :) –

2
CREATE TRIGGER `trig_after_image_update` AFTER UPDATE ON `tbl_image` 
FOR EACH ROW 
    if old.img_lnk<>NEW.img_lnk 
    then 
     update tbl_vehicle set last_modified_date=NOW() where id in (select vehicle_id from tbl_vehicle_image where image_id=OLD.id); 
    end if; 

Je n'ai pas tous les noms de domaine de votre table pour changer ceux-ci. J'ai utilisé id comme clé primaire pour la table correspondante.

+0

pour ces deux réponses, je reçois 'erreur de syntaxe, fin inattendue' –

+0

@KellyLarsen - Essayez 'END $$' au lieu de 'END'. –

+0

@KellyLarsen Utilisez 'set delimiter $$' dans la ligne de départ. –

Questions connexes