2010-09-07 31 views
0

我正在爲使用MySQL的小型Web應用程序實現「另存爲複製」功能。在表,子表和子表中複製行的最簡單方法

比方說,我有三個表,像這樣......

TABLE Doc 
ID, 
title, 
text 

TABLE DocAttributes 
ID, 
DocID -> Doc(ID) 
title, 
text 

TABLE DocSubAttributes 
DocAttrID -> DocAttributes(ID) 
title, 
text 

我們這裏是這樣一種情況:一個文檔可以有多個DocAttributes,每個能的DocAttribute依次有多個子屬性。

現在,如果我沒有擔心DocSubAttributes表,這將是相當簡單的,我會做這樣的事情...

$insertID = INSERT INTO Doc (title, text) SELECT title, text FROM Doc WHERE ID = $docID; 

INSERT INTO DocAttributes DocID, title, text SELECT $insertID AS DocID, title, text FROM Doc WHERE ID = $docID; 

但是,因爲還有第三單這個方法不起作用。我需要知道每個DocAttributes行的主鍵,以便在DocSubAttributes中創建對應的行。

我意識到要做到這一點的唯一方法是一次遍歷DocAttributes一行,每次迭代選擇所有DocSubAttributes,然後迭代地一次一個地執行每次插入。

我在想:是否有一種更簡單的方法來複制這些行在其各自的表中創建一個全新的獨立的數據實體而不依賴迭代?

感謝您的幫助

回答

0

如果你願意ID字段添加到您的錶鏈接返回到主記錄,你應該能夠有三個INSERT查詢(其中最後將有一個完成它加入以獲取新ID)。

0

你可以插入等等,例如之前使自己的主鍵,

$uniqueKey = md5($ID . $title . $text); 

,並插入爲DocAttributes主鍵(ID),這樣你們就知道和使用的插DocSubAttributes

相關問題