从一个表插入另一个表

时间:2014-10-03 12:42:21

标签: php mysql insert

我目前正在处理一个PHP / MySQL项目,并且已经陷入了一个复杂的(或至少对我而言)插入函数。

这里适用的3个表是

客户端 这里相关的字段是clientpk(AI主键)和clientscope。

Templatedocs ,相关的字段是templatepk,doctype,doctitle,templatescope

ClientDocs 与docpk,doctype,doctitle

相关的字段

我想要做的是在我在客户端表中添加一条新记录之后有一个代码,它将templatedocuments表中的记录插入到客户端文档表中,其中client.clientscope = templatedocuments.templatescope,我怀疑它将是一个foreach函数

我只使用过插入查询,从一个表插入另一个表,而不是使用3个表。

如果有人能给我一个基本的想法,那么我应该能够把剩下的想法弄清楚了,谢谢。

更新:我在这里苦苦挣扎的是说ClientTable是表A,TemplateDocuments是表B,ClientDocuments是TableC。我知道当我从表A中编写插入函数时如何将表A中的记录插入表C.但是我不知道如何从表B(本质上是一个不相关的资源表)数据插入到表C中,使用表B中的当前变量。

为了把它放到上下文中,表B现在有147个不同的记录,其中只有50个会在每个表C中结束,因为有变化,所以过滤的是client.clientscope和templatedocuments.template范围。要插入的相关记录。

3 个答案:

答案 0 :(得分:0)

您可以使用join语法中的insert.. select

INSERT INTO clientdocuments (doctype, doctitle)
SELECT doctype, doctitle
FROM   templatedocuments t
JOIN   client c ON t.templatescope = c.clientscope
WHERE  client.clientpk = 123

答案 1 :(得分:0)

你可以在mysql端使用触发器链接这个:

DELIMITER $$

USE `databaseName`$$

DROP TRIGGER /*!50032 IF EXISTS */ `trigger_TableName`$$

CREATE

TRIGGER `trigger_Templatedocs` AFTER UPDATE ON `Client` 
FOR EACH ROW BEGIN
IF NEW.field <> OLD.field THEN
    INSERT INTO Templatedocs (fieldName, fieldName2) VALUES (NEW.field, NEW.field);
END IF;
END;
$$

DELIMITER ;

我不确定它是否适合你,但你可以尝试一下。

答案 2 :(得分:0)

您可以使用AFTER INSERT表格上的client触发器完成此操作;类似下面的内容

DELIMITER $$
create trigger trg_insert_clientdocs
after insert on Client
for each row 
begin
INSERT INTO ClientDocs(doctype, doctitle)
select td.doctype, td.doctitle
from Templatedocs td
where td.templatescope = new.clientscope;
END$$
DELIMITER ;

以上触发器代码将根据ClientDocs列上的匹配将记录从Templatedocs表插入templatescope表;其中templatescope列的值与Clientclientscope列中新插入的值相同。