2015-03-31 31 views
1

我有一個上傳腳本與虛擬文件夾結構(所以沒有實際結構)鏈接到一個用戶。所以我可以爲每個用戶製作不同的結構。複製虛擬文件夾結構到另一個用戶

此結構(僅)保存在數據庫中。文件在數據庫中鏈接,但都保存在一個文件夾中。但是現在我想將完整的結構複製到另一個用戶。該結構可以具有無限的子文件夾。

數據庫看起來類似:

id | user | parent | name 
    1 | 6 | 0 | Folder 1 
    2 | 6 | 0 | Folder 2 
    3 | 6 | 1 | Sub of Folder 1 
    4 | 6 | 1 | 2nd Sub of Folder 1 
    5 | 6 | 2 | Sub of Folder 2 
    6 | 6 | 3 | Sub of Sub of Folder 1 
    7 | 6 | 6 | Sub of Sub of Sub of Folder 1 

什麼是將它複製到其他用戶的最佳方法是什麼? 只用mysql可以嗎?

(請記住,ID是自動增量指數,父母是指ID) 希望有人可以提供幫助。

+1

使用INSERT INTO SELECT(...)FROM也許吧? http://stackoverflow.com/questions/5253302/insert-into-select-for-all-mysql-columns – Maximus2012 2015-03-31 21:27:38

回答

1

@ Maximus2012是對某事。

INSERT INTO table (
    user, 
    parent, 
    name 
) 
SELECT (
    7 as user, 
    parent, 
    name 
) 
FROM table 
WHERE user = 6; 

這樣做是從表中選擇給定的列並使用結果在表中插入值。請記住,您必須在INSERT查詢中指定列,然後按SELECT子查詢的相同順序指定列。作爲用戶的7顯然應該是新用戶的適當ID。但是,它演示瞭如何在子查詢中包含具體值。

+0

但比父不鏈接到該文件夾​​的新ID? – spaantje 2015-04-01 07:59:25

+0

@spaantje不知道我理解你的問題。您聲明ID列具有默認的自動增量。如果在'INSERT'中省略'id'列,那麼將通過'1'遞增現有的最高'id'來插入新的'id'。這會將用戶'6'的文件結構中的所有值複製到用戶'7'的結構中。 – ToothlessRebel 2015-04-01 14:21:37

+0

@spaantje我現在看到了。我會看看我能做什麼。它是否必須在SQL中完成?如果每個插入操作都是通過腳本完成的,則可以使用每個插入操作返回的「id」。 – ToothlessRebel 2015-04-01 14:29:18

0

看到這個SQL Fiddle

有一點需要注意的是,如果在查詢過程中表格被修改,您可能會遇到競爭條件。我很遺憾與MySQL不太熟悉,以確保不會發生。研究一下,在鎖定表的時候複製(這個可能發生在寫入上)或者確定一個事務是否會使它安全。

這裏描述的模式和INSERT ... SELECT狀態確實按照請求執行,並且會導致最適合您的完整用例的方法。

+0

注意:此答案**不正確**,因爲某些子文件夾的父文件夾將是錯誤的。 – ToothlessRebel 2015-04-01 16:00:45

相關問題