我目前正在处理一个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范围。要插入的相关记录。
答案 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
列的值与Client
表clientscope
列中新插入的值相同。