复制并多次插入(mysql)?

时间:2012-10-17 21:59:53

标签: mysql sql insert cascade lastinsertid

我的问题解释起来非常简单,但我没有成功找到合适的答案!

我在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专家,我希望这里的人能有一个很好的解决方案。

先谢谢。

巴斯蒂安

2 个答案:

答案 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太久了。但是你应该能够做到以下几点。

  1. 从数据库中获取A,将ID存储在php中的变量中(建议$ oldAID)
  2. 复制A属性并以A'
  3. 存储回数据库
  4. 获取上次插入ID并存储为变量(建议$ newAID)
  5. 从DB中获取所有B记录,其中parent = $ oldAID
  6. 循环浏览b记录,将当前记录ID存储为$ oldBID
  7. 复制B1属性并以父ID为“$ newAID
  8. ”的形式存储回数据库为B1'
  9. 获取最后一个insertID和商店为$ newBID
  10. 从DB中获取所有C记录,其中父ID = $ oldBID
  11. 制作副本并将其存储回父ID = $ newBID
  12. 的数据库
  13. 通过在步骤5中启动的循环进行迭代
  14. 通过使用PHP密切关注您的上一个插入ID,您可以制作所需的副本并使其保持准确。除此之外,php和MySQL之间还有很多来回,所以在一个非常大的集合中,这会有几个级别,这样的过程可能需要几秒钟。但是,如果你的正常集合与你的例子一样小而且浅,那就不应该太糟糕了。