【问题标题】:Trigger to Update value in mysql table触发更新mysql表中的值
【发布时间】:2013-04-11 03:30:29
【问题描述】:

我在想出正确的语句来更新与插入触发器相同的表中的字段时遇到问题。这是一个 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'

现在接下来我需要将它放在表上的触发器中 insert WHERE 'products_extra_fields'.'value' = 'color'。

我似乎无法弄清楚如何使用 SELECT CASE 语句构建此触发器以包含 UPDATE。

【问题讨论】:

  • 你的价值怎么可能同时是= 'color'LIKE '%red%'?此查询将始终返回“其他颜色”。
  • 值 'color' 只是 'products_extra_fields' 表中字段的名称。这样做是因为该表包含添加到产品表中的每个额外字段的记录。这可能会令人困惑,但查询确实有效,我得到了一个很好的所有颜色列表,刚刚再次测试。
  • 嗯..好的..哪个字段有字段名,哪个有值?
  • 该表的结构如下:id、productId、name、value。第一条记录是:1、1、color、red。第二条记录可以是:2、1、尺寸、大号第三条记录:3、2、颜色、蓝色等。

标签: mysql database


【解决方案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 触发器。

【讨论】:

  • 这看起来正是我想要的。但是,导入此语句时出现错误。 phpMyAdmin 说它在行中:END; (就在 ELSE 之后)。我认为这与缺少 BEGIN 有关??
  • 我最终通过在 phpMyAdmin 中手动创建触发器来解决此问题。这行得通,所以陈述本身是正确的!谢谢。
猜你喜欢
  • 2011-03-23
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-02
  • 2014-10-20
  • 1970-01-01
  • 2012-03-13
相关资源
最近更新 更多