【问题标题】:Complex MYSQL trigger复杂的MYSQL触发器
【发布时间】:2013-10-19 20:40:57
【问题描述】:

我正在尝试在mysql 中创建一个触发器,该触发器将在填充另一个表 (wp_usermeta) 时填充一个新表 (customers)。我知道这可能是糟糕的设计,但我处于wp_usermeta 不会总是被填充的情况,我需要确保customers 总是有我需要的数据。

为此,我认为创建触发器是实现此目的的最佳方法,但它根本不起作用。

这是我所拥有的:

CREATE       TRIGGER `update_customers` AFTER INSERT ON `wp_usermeta`
FOR EACH
ROW BEGIN
INSERT INTO test_customers
SET test_customers.first_name = new.meta_value;

END

我这样做只是为了尝试将wp_usermeta 数据复制到customer 表中,但这不起作用。 mysql 接受了触发器,但是当我将数据添加到 wp_usermeta 表时,什么也没发生。

我遇到的一个问题是,我只想将名字、姓氏、地址等内容填充到customers 数据库中。 wp_usermeta 表如下所示:

如您所见,该表设置有键/值对。所以我遇到的问题是让wp_usermeta.first_name 转移到customers.first_name

我对这类事情或一般数据库没有太多经验。

这是我尝试过的另一个查询:

TRIGGER `update_customers` AFTER INSERT ON `wp_usermeta`
FOR EACH
ROW BEGIN
INSERT INTO test_customers SET test_customers.first_name = wp_usermeta.meta_value WHERE wp_usermeta.meta_key == first_name;

END

但这也没有用。如果有人可以解释如何确定meta_key 是否等于first_name,然后将相应的wp_usermeta.meta_value 值应用于customers.first_name 表,那就太好了。

如果触发器不是完成我想要做的事情的最佳方式,我也愿意接受建议。

【问题讨论】:

    标签: php mysql database wordpress triggers


    【解决方案1】:

    试试这样的:

    CREATE TRIGGER `update_customers` AFTER INSERT ON `wp_usermeta`
    FOR EACH ROW 
    BEGIN
      IF NEW.meta_key = 'first_name' AND NEW.meta_value IS NOT NULL THEN
        INSERT INTO test_customers(first_name) Values(NEW.meta_value);
      END IF;
    END;
    

    sqlfiddle demo

    【讨论】:

    • 这允许我设置触发器,但是当我运行它时,first_name 字段没有在wp_usermeta 表中设置,这是预期的吗?
    • 只有在你插入 wp_usermeta 并且 first_name 不为 null 时才会调用此触发器。你试图完成什么不起作用?
    • 当我运行它时,它在test_customer 表中创建了新行,但没有得到传入的值。我可能有错字或其他问题。非常感谢!!!我认为这对我有用!顺便说一句,答案很好:)
    • 你是说在 wp_usermeta 中插入的时候,test_customer 中插入了一条记录,但 test_customer 中的值为 null?
    • 是的,更具体地说,first_name 的值为 null。它创建了新行,但似乎没有传输名字的值。我检查了变量和所有内容,确保一切正确,但似乎没有将值传递到新表中。
    猜你喜欢
    • 2016-04-15
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 2011-10-19
    相关资源
    最近更新 更多