2014-10-03 163 views
1

我有一個PHP/MySQL項目,我目前正在工作,並已成爲一個複雜的(或至少對我來說)插入功能。這裏適用從一張表插入另一張表

3表是

客戶 字段是與此有關的,clientpk(AI主鍵)和clientscope。

Templatedocs ,菲爾茲是相關的是templatepk,DOCTYPE,doctitle,templatescope

ClientDocs 字段相關docpk,DOCTYPE,doctitle

我想要做的是有一在客戶端表中添加一條新記錄後,將記錄從templatedocuments表插入到clientdocuments表中,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模板範圍,過濾哪些相關記錄來插入。

+0

考慮使用'插入後觸發器' – Rahul 2014-10-03 12:45:33

回答

0

可以在insert.. select語法使用join S:

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

是的,這是有道理的,是接近的,我將如何將它與一個Foreach函數結合起來? – user3169979 2014-10-03 12:50:47

+0

爲什麼你想要一個foreach函數?只需通過更改'clientpk'上的條件在一個語句中插入所有缺少的項目。 – Mureinik 2014-10-03 12:51:41

+0

好,那麼這項工作? (); $ sql =「INSERT INTO documents_doucments(companyfk,doctype,doctitle)values('」。$ values [「companypk」]。「',doctype,templatename)FROM templates_documents WHERE global_companies.msscope = templates_documents.scope)」; CustomQuery($ SQL); – user3169979 2014-10-03 12:55:54

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 ; 

林不知道這對你或工作沒有,但你可以試試這個。

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 ; 

以上觸發代碼將從基於templatescope列匹配Templatedocs表中插入記錄ClientDocs表;其中templatescope列的值與Clientclientscope列中新插入的值相同。

相關問題