2013-04-10 77 views
0

我有一個問題,想出正確的語句來更新插入觸發器在同一個表中的字段。它用於MySql表。觸發更新MySQL表中的值

基本上我需要在字段中檢查基本顏色的插入值,所以如果字段是:'鈷藍',我希望插入字段的顏色爲'藍色'。

我已經想出了下面的語句,以獲得正確的顏色是正確的:

SELECT CASE 
    WHEN 'value' LIKE '%blue%' THEN 'Blue' 
    WHEN 'value' LIKE '%red%' THEN 'Red' 
    ELSE 'Other color' 
END AS normalized_color 
FROM 'products_extra_fields' 
WHERE 'products_extra_fields'.'value' = 'color' 

現在接下來,我需要這是在桌子上插入其中「products_extra_fields」觸發「值」。 ='顏色'。

我似乎無法弄清楚如何構建這個觸發器來包含帶有SELECT CASE語句的UPDATE。

+0

你的值如何同時變爲'='color''和'LIKE'%red%'?此查詢將始終返回「其他顏色」。 – Vatev 2013-04-10 19:05:12

+0

'color'值只是'products_extra_fields'表中字段的名稱。這是因爲該表包含添加到產品表的每個額外字段的記錄。這可能會令人困惑,但查詢非常有效,我得到了一個更正的所有顏色的清單,然後再次進行測試。 – Hugo 2013-04-10 19:14:33

+0

恩..好吧..哪個字段有字段名稱,哪個字段有值? – Vatev 2013-04-10 19:15:59

回答

1

插入後不需要更新表格,只需更改要插入觸發器的值即可。

CREATE TRIGGER `before_insert_products_extra_fields` 
BEFORE INSERT ON `products_extra_fields` FOR EACH ROW 
BEGIN 
    IF(NEW.name = 'color') THEN 
     SET NEW.value = CASE 
      WHEN NEW.value LIKE '%red%' THEN 'red' 
      WHEN NEW.value LIKE '%blue%' THEN 'blue' 
      ... 
      ELSE 'other' 
     END; 
    END IF; 
END 

另外,您應該在該表上創建類似的BEFORE UPDATE觸發器。

+0

這看起來正是我正在尋找。但是,導入此語句時出現錯誤。 phpMyAdmin說它在行中:END; (在ELSE之後)。 我認爲這與BEGIN失蹤有關? – Hugo 2013-04-10 19:47:39

+0

我最終通過手動在phpMyAdmin中創建觸發器來解決此問題。這工作,所以聲明本身是正確的!謝謝。 – Hugo 2013-04-15 10:05:12