使用交叉引用的行复制MySQL中的数据

时间:2015-08-27 13:30:39

标签: php mysql database recursion

我不是数据库专家,所以我不确定如何简短而简洁地提出这个问题。我正在尝试复制具有以下特征的数据:许多复制数据的表包含对其他表的引用,其中数据被复制;也就是说,患者可能会参加一个记录体重的班级,因此我需要复制班级出勤行以及存储在另一个表格中的体重值,该表格由课堂出勤行引用。此数据库中还有其他更复杂的示例,但似乎我需要执行这些相互引用的项的某种递归副本,以便我可以在复制的数据中维护交叉引用。

那么,这个问题有什么标准方法吗?如果没有直接答案,有人可以分享我试图做的事情的术语,以便我可以自己查找吗?我以前已经多次解决过这个问题,但我不知道如何找到解决方案。我理解JOIN和FK的基本概念,但是这个解决方案似乎需要一种方法来复制各种表中的行,同时还要返回并更新交叉引用(在某些情况下,这些是FK,在其他情况下,它们是不是;我一直坚持使用架构。

PS:如果它是一个如此明显的解决方案,那么为什么没有人只是提供它或在下面描述它以便我们可以继续前进?大多数人都能够偶尔提出一个愚蠢的问题,这很可能是我的一个问题,但是我非常认真地坚持这个问题并希望得到一些帮助。

这里有一个草图,用于尝试说明问题的架构的一小部分: enter image description here

当我们复制患者的数据记录时,我们需要1)在患者中创建一个新行; 2)在edclass_session_labs中创建相应的新行; 3)在patient_lab_weight中创建一个新行; (这里是我看到的棘手部分)4)还将edclass_session_labs中的引用更新为patient_lab_weight中的新行。我正在寻找的是一种以编程方式和算法方式执行此操作的方法。我确定之前已经解决了这样的问题,这就是我在这里寻求建议的原因。

1 个答案:

答案 0 :(得分:0)

我没有完全明白你的意思"复制患者数据",所以有两种选择:

1)如果你想"复制"要将数据链接到报表,需要将许多表与相关信息链接起来,因此必须研究JOIN和FOREIGN KEY的概念。当我们需要将关系数据转换为非IT人员可以轻松阅读的平面表时,我们就会这样做。

2)如果需要将数据库表中的特定数据复制到其他数据库表,还必须研究FOREIGN KEY和表关系。您需要了解表行与其他表上的行的关系(一对多,多对一,多对多),因此您可以创建基于SELECT的INSERT语句,这些语句将过滤您需要的确切数据。

这是非常一般的,但我认为这足以指出你正确的方向。

编辑:

由于该问题与创建患者数据的合并结构有关,因此我们说患者1和患者2.他们是同一个人的副本,需要合并。我会按此顺序执行此操作:

a)创建一名患者3,这将成为我们合并的目标。只需将患者1或2中的每个字段复制到此新记录中。

b)根据需要在表#34; patient_lab_weight"中创建尽可能多的新记录。例如:如果患者1在那里有2条记录,而患者2有4条记录,则必须创建6条记录,这些记录是与患者1和2相关的记录的副本,但是patient_id将是3.但是,在创建每条记录之后记录此处,获取为字段" patient_lab_weight_id"生成的auto_increment,并在" ed_class_session_labs"中插入新记录,其中patient_id = 3," patient_lab_weight_id" =获得的ID。对" patient_lab_weight"。

中的每个插入执行此操作

c)毕竟,在您的申请中禁用患者1和2。

如果你使用这种方法,你将慢慢建立你的新结构,以一致的方式链接。