MySQL插入多个记录并在另一个表中引用它们

时间:2014-11-19 12:50:37

标签: php mysql

我想尽可能地将此查询作为通用,我不想进入具体细节,而是学习一种普遍接受的方法来解决这个问题。

我有一些数据,结构如下:

$data => Array
    (
     [0] => Array
           (
            [field_index] => 2
            [comment] => damage of object 1
            [image] => Array
                   (
                    [url] => /path/to/file/my_image.jpg
                    [fname] => my_image.jpg
                    [fsize] => 77005
                    )

            ),
      [1] ...
      [2] ...

     )

我试图在两个表filesrecords中插入它,图像数据存储在第一个表格中,而参考图像ID的记录数据存储在第二个表格中。

我能做到的唯一方法是遍历所有项目并逐个运行INSERT个查询,如下所示:

foreach($data as $item){

// INSERT IMAGE TO FILES TABLE
// GET INSERT_ID
// INSERT ITEM DATA TO RECORDS (USE INSERT_ID OF IMAGE AS REFERENCE)
}

我的问题是:

a)可以一次一个地运行插入查询而不是在单个查询中插入多行吗? b)是否有另一种方法可以实现我所追求的目标 - 在两个表格中引用数据。

我想单独保存文件数据,因为:

  • 并非所有记录都可能包含图像数据
  • $data可能有修订版,其中一些记录可能会更改但不是全部,并且我不想要冗余图像记录

1 个答案:

答案 0 :(得分:0)

您有两种选择 -

  1. 您可以从父项开始单独插入记录,也可以使用子项完成。您可以使用Last_Insert_Id来获取插入MySQL的最后一个ID,这允许您插入父项,获取它的主键,然后将其包含在子记录的任何插入中。我通常将Last_Insert_Id作为MySQL存储过程中的输出参数返回,这样调用代码就可以对其进行管理。
  2. 您还可以使用单个插入命令在表中插入多行 - 这是插入大量记录的快捷方式。

    1. 使用ORM(对象关系管理器),这样您就可以将数据插入到代码中的对象中,这意味着您不必担心事物的SQL方面,因为ORM包装器处理与你的数据库。这对现有项目来说是一个很大的变化,但可能是值得的。
    2. 关于ORM的一个注意事项 - 我所处理的很多内容都没有特别好地批量插入数千或数万条记录,因此SQL可能是您最好的选择。