我的问题很容易解释,但我没有成功找到正确的答案!
我在 mysql 中有 3 个表,分别称为 tA、tB、tC。我在 tA 中有一个条目 A,在 tB 中有 2 个条目 B,在 tC 中有 3 个条目 C,其层次结构如下:
A
|
----------------
| |
B1 B2
| |
-------- |
| | |
C1 C2 C3
如您所想,我将 B 条目链接到具有 A id 的 A 条目,并且将 C 条目链接到具有 B id 的 B 条目。
我只想将这些数据复制到:
A'
|
----------------
| |
B1' B2'
| |
-------- |
| | |
C1' C2' C3'
所以一开始,我首先创建 A' 并复制链接到 A' 的 B 条目。不用担心。
但之后,我做了一个左连接请求,将 C 条目复制到 C'。它几乎可以工作...唯一的问题是,通过这种方式,我的 C' 条目链接到 B id 而不是 B' id !!!!
我尝试了一些其他的东西,但我不知道该怎么做。看起来很简单。也许我累了...也许我必须一个一个地复制B条目,然后复制当前B条目的所有C条目才能转到下一个。
但是有没有更聪明的方法来做到这一点?带insert_id、级联、触发器、外键???
我不是 sql 专家,我希望这里有人能提供一个好的解决方案。
提前致谢。
巴斯蒂安
最佳答案
Alain 的方法是一种纯粹在 SQL 中处理此问题的可能方法,但需要对表进行一些修改,主要是存储从中复制对象的原始 ID。
所以你说你正在使用 php,我希望我能给你更多相关的例子,但我已经离开 php 太久了。但您应该能够执行以下操作。
- 从数据库中获取 A,将 A id 存储在 php 中的一个变量中(建议 $oldAID)
- 复制 A 属性并作为 A' 存储回数据库
- 获取最后插入 ID 并存储为变量(建议 $newAID)
- 从 DB 中获取所有 B 记录,其中 parent = $oldAID
- 循环b条记录,将当前记录id存为$oldBID
- 复制 B1 属性并将其作为 B1' 存储回数据库,父 ID 为 $newAID
- 获取最后的 insertID 并将其存储为 $newBID
- 从父 ID = $oldBID 的数据库中获取所有 C 记录
- 制作副本并存储回父 ID = $newBID 的数据库
- 遍历从第 5 步开始的循环
通过使用 PHP 密切关注您最后插入的 ID,您可以制作所需的副本并保持它们的准确性。不利的是,在 php 和 MySQL 之间有很多来回,所以在一个非常大的集合中,这将深入几个层次,这样的过程可能需要几秒钟。但是,如果您的法线集像您的示例一样小而浅,那应该不会太糟糕。
关于mysql - 复制并多次插入(mysql)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12944100/