2012-11-18 84 views
1

我有3個表,tbl_image,tbl_vehicle_image和tbl_vehicle在觸發加入更新命令

tbl_vehicle_image解決tbl_image和tbl_vehicle之間的多對多關係

tbl_vehicle有LAST_MODIFIED_DATE

如何創建當我改變例如tbl_image.img_lnk時,使用tbl_vehicle_image查找tbl_vehicle中使用該圖像的所有記錄,並將其last_modified_date設置爲NOW()?

回答

1

你可以這樣做:

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

因爲它討論了這個答案,所以我會發布她的,我在頂部添加了DELIMITER $$,並在最後一行放置了分號(WHERE i .....)並且語法問題消失了 –

+0

yep,just got它去,精美的作品:) –

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; 

我沒有你的表的所有字段名稱,以便改變這些。我用id作爲對應表的主鍵。

+0

這兩個答案我越來越'語法錯誤,意外結束' –

+0

@KellyLarsen - 嘗試'END $$'而不是'END'。 –

+0

@KellyLarsen在起始行使用'set delimiter $$'。 –