2015-03-31 92 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

相关问题