我的问题解释起来非常简单,但我没有成功找到合适的答案!
我在mysql中有3个表,称为tA,tB,tC。我在tA中有一个条目A,在tB中有2个条目B,在tC中有3个条目C,具有这样的分层体系结构:
A
|
----------------
| |
B1 B2
| |
-------- |
| | |
C1 C2 C3
可以想象,我有B条目链接到A条目的A条目,C条目链接到B条目的B条目。
我只想将这些数据复制到:
A'
|
----------------
| |
B1' B2'
| |
-------- |
| | |
C1' C2' C3'
所以在开始时,我首先创建A'并复制链接到A'的B条目。不用担心。
但之后,我做了一个左连接请求,将C条目复制到C'。它几乎可以工作......唯一的问题是,通过这种方式,我的C'条目链接到B id而不是B'id !!!!
我尝试了其他一些东西,但我不知道该怎么做。看起来很简单。也许我累了......也许我必须逐个复制B条目,然后复制当前B条目的所有C条目,然后再转到下一条。
但是,有没有更聪明的方法呢?用insert_id,cascade,trigger,foreign key ???
我不是一名sql专家,我希望这里的人能有一个很好的解决方案。
先谢谢。
巴斯蒂安
答案 0 :(得分:0)
在第二组表中添加一列,其中包含原始集中的ID。创建A'后,您可以使用原始ID创建B'条目。然后,使用B'中的原始ID创建C'。
有意义吗?
所以,有了@bastien的更多信息,我建议在tableA中添加一个名为old_id
的列。插入复制的行时,请将原始id
放入old_id
。然后,您可以使用old_id
查找tableB,tableC等中的相关行。
答案 1 :(得分:0)
Alain的方法是一种纯粹在SQL中处理这种方法的可能方法,但需要进行一些表修改,基本上存储从中复制对象的原始id。
所以你说你使用的是php,我希望我能给你更多相关的例子,但是我已经离开了php太久了。但是你应该能够做到以下几点。
通过使用PHP密切关注您的上一个插入ID,您可以制作所需的副本并使其保持准确。除此之外,php和MySQL之间还有很多来回,所以在一个非常大的集合中,这会有几个级别,这样的过程可能需要几秒钟。但是,如果你的正常集合与你的例子一样小而且浅,那就不应该太糟糕了。