2013-07-26 63 views
0

所以我在我的數據庫中有兩個表:'test1'和'cities'。我在test1中有以下幾個專欄:'Origin','OriginIndex'(我只提及相關部分),以及城市:'城市','價值'(僅限於相關部分)。 「城市」表在「城市」列中有5000個城市,在與每個城市(如倫敦,巴黎等)對應的「價值」列中具有雙值(如0.990,0.345,0.457,1.566)。觸發器連接多個表

因此,假設用戶在'test1'表的'Origin'列中輸入'London'。在「城市」表中,倫敦「城市」的「價值」爲1.555。現在,我試圖在phpmyadmin中觸發一個觸發器,它會檢查'Origin'='city',如果是,則在插入'London'後,相應的'value'將被存儲在'OriginIndex'中。我創建了扳機這樣的:

CREATE TRIGGER t1 
AFTER INSERT ON test1 
FOR EACH ROW 
BEGIN 
UPDATE test1 a, cities b SET a.OriginIndex = b.value WHERE a.Origin = b.city; 
END 

然而,這不是存儲在「價值」到「OriginIndex」每次我給在「TEST1」表的「產地」欄中輸入我的php網站的時間(本地主機)。任何人都可以找出錯誤嗎?任何建議或提示將不勝感激! =]

回答

1
  1. MySQL不允許做一個觸發器代碼內的變化對你有觸發
  2. 您可以通過更改行的列值克服這種限制使用BEFORE插入相同的表事件而不是AFTER
  3. 現在要解決在MySql中插入的行的列值,您需要使用NEW關鍵字。

話雖這麼說,你的觸發器應該像

CREATE TRIGGER tg_test1_insert 
BEFORE INSERT ON test1 
FOR EACH ROW 
    SET NEW.originindex = 
    (
     SELECT value 
     FROM cities 
     WHERE city = NEW.origin 
    ); 

這裏是SQLFiddle演示

+0

我有另外一個問題。我創造了像你一樣的觸發器,它的工作。但是,我試圖乘以兩個值,即originindex和destinationindex。 –

+0

在什麼表中存儲'destinationindex'索引以及它的數據類型是什麼?顯示幾行樣本數據。 – peterm

+0

下面是該問題的鏈接:http://stackoverflow.com/questions/18137792/triggers-to-multiply-trigger-based-columns-in-mysql –