2013-04-10 114 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