使用mysql中另一个表的类似数据更新新数据库表的语法

时间:2013-10-17 22:05:49

标签: php mysql sql wordpress triggers

我正在尝试设置一个触发器,用于在填充wp_meta时更新我拥有的另一个表(客户)。所以,基本上,当数据添加到wp_meta时,我希望更新customers表中的某些字段。例如,在first_name中更新last_namewp_meta时,我希望first_namelast_name使用相同的信息进行更新。

这是我到目前为止所做的:

CREATE TRIGGER update_customers AFTER UPDATE ON wp_usermeta
    FOR EACH ROW
    BEGIN
    customers.first_name = wp_meta.first_name;
    END        

我一直收到语法错误,我想知道我做错了什么。我还将分隔符设置为//

另一个问题是数据库wp_meta基于键/值系统。因此,您有wp_meta.metakey和相关的wp_metavalue。我迷失了如何从钥匙中获取价值。

2 个答案:

答案 0 :(得分:1)

也许是这样的?

CREATE TRIGGER update_customers AFTER UPDATE ON wp_usermeta
    FOR EACH ROW
    BEGIN
    update customers set customers.first_name = new.first_name where customers.id=new.id;
    END      

(未经测试......)

答案 1 :(得分:1)

Lajos的答案是一个良好的开端。但是,我会添加(1)您的触发器定义失败的原因是“BEGIN”和“END”关键字之间的SQL不是有效的SQL语句,(2)您还需要为AFTER创建触发器INSERT事件,否则您只会在更新wp_userdata表时获取客户数据,而不是最初插入记录时的客户数据:

CREATE TRIGGER trig_wp_usermeta_after_update AFTER UPDATE ON wp_usermeta
    FOR EACH ROW
    BEGIN
    update customers set customers.first_name = new.first_name where customers.id=new.id;
    END;

CREATE TRIGGER trig_wp_usermeta_after_insert AFTER INSERT ON wp_usermeta
    FOR EACH ROW
    BEGIN
    update customers set customers.first_name = new.first_name where   customers.id=new.id;
    END;