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

标签 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. 您可以单独插入从父级开始到子级结束的记录。您可以使用 Last_Insert_Id 获取最后插入 MySQL 的 id,这允许您插入父记录,获取其主键,然后将其包含在子记录的任何插入中。我通常将 Last_Insert_Id 作为输出参数返回到 MySQL 存储过程中,以便调用代码可以对其进行管理。

您还可以使用单个插入命令将多行插入表中 - 这是插入大量记录的更快方法。

  • 使用 ORM(对象关系管理器),这样您就可以将数据插入到代码中的对象中,这意味着您不必担心 SQL 方面的问题,因为 ORM 包装器会处理与数据库的通信为你。对于现有项目来说,这是一个相当大的改变,但可能是值得的。
  • 关于 ORM 的一点说明 - 我处理过的很多内容都不能很好地批量插入数千或数万条记录,因此在这种情况下 SQL 可能是您最好的选择。

    关于php - MySQL插入多条记录并在另一个表中引用它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27017287/

    相关文章:

    php - 制作我自己的网站分析

    php - 是否可以将 FFMPEG 输出发送到 php 文件?

    php - 是utf-8的问题吗? php mysql

    mysql - 列数与值数不匹配

    mysql - 使用不同的日期格式将 CSV 导入 MySQL

    mysql - 在 MySQL 查询中使用 DISTINCT、COUNT 和 HAVING

    mysql - 如何在 MySQL 中返回数据透视表输出?

    mysql - 如果其中一个字段尚未匹配,如何将一个表移动到另一个表

    php - 搜索 csv 列并插入到 mysql

    javascript - 将备忘录标记为已读