我在我的SQL數據庫中有一個表,其中包含一個名爲'event_attributes'的列。這是一個字符串,每個單元擁有這樣的事情:使用CASE的SQL觸發器中的多個SET語句?
a:4{s:10:"Discipline";s:7:"Running";s:5:"Level";s:3:"All";s:10:"Instructor";s:13:"Bill Jones";s:3:"Free";s:2:"No";}
我試圖創建一個闖入看起來像
Disciple | Level | Instructor | Free
-----------------------------------------
Running | All | Bill Jones | No
使用下面的代碼的幾個新列下來觸發,我可以得到這個工作的一套聲明。
DROP TRIGGER IF EXISTS `recode`;
CREATE TRIGGER `recode`
BEFORE INSERT ON `wp_em_events`
FOR EACH ROW
SET NEW.discipline = CASE
WHEN NEW.event_attributes LIKE '%Boxing%' THEN 'Boxing'
WHEN NEW.event_attributes LIKE '%Climbing%' THEN 'Climbing'
WHEN NEW.event_attributes LIKE '%Cycling%' THEN 'Cycling'
WHEN NEW.event_attributes LIKE '%Yoga%' THEN 'Yoga'
ELSE NEW.discipline = NULL
END
但是,如果我添加類似:
SET NEW.level = CASE
WHEN NEW.event_attributes LIKE '%All%' THEN 'All'
....
我得到一個消息,說有我的SQL語法錯誤。任何人都知道如何將兩個或多個SET語句嵌套到一個觸發器中?對不起,如果這是一個愚蠢的問題 - 在這個新的。
謝謝!
而不是增加額外的'set'語句,我認爲你應該使用逗號 - 'set new.field = blah,new.field2 = blah2' ... – sgeddes
這條線有問題。 'ELSE NEW.discipline = NULL',它應該是'ELSE NULL',或者如果所有條件都失敗,你可以省略'ELSE'部分作爲缺省值'null' –