2015-12-30 50 views
1

我在我的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語句嵌套到一個觸發器中?對不起,如果這是一個愚蠢的問題 - 在這個新的。

謝謝!

+0

而不是增加額外的'set'語句,我認爲你應該使用逗號 - 'set new.field = blah,new.field2 = blah2' ... – sgeddes

+0

這條線有問題。 'ELSE NEW.discipline = NULL',它應該是'ELSE NULL',或者如果所有條件都失敗,你可以省略'ELSE'部分作爲缺省值'null' –

回答

1

您應該使用逗號列出多個字段。這裏是一個濃縮的例子:

create trigger test before insert on sometable 
for each row 
set NEW.field2 = case when New.field1 = 1 then 2 else 0 end, 
    NEW.field3 = case when New.field1 = 1 then 3 else 0 end; 

順便說一句,雖然你else聲明技術上的作品,你基本上設置NEW.discipline = NEW.discipline = NULL。使用else null讀得好一點。

+0

謝謝大家!是的,那個逗號就是這樣做的。另一個問題是我添加了另一個「SET」,所以它看起來像SET NEW.field1 ....,SET NEW.field2 .....添加了逗號,刪除了第二個「SET」並且它可以工作!我也將ELSE NEW.field = NULL更改爲ELSE NULL。感謝幫助! –