gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 23:25:19 26 4
gpt4 key购买 nike

我想让这个询问尽可能通用,我不想深入细节,而是想学习解决这个问题的普遍接受的方法。

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

$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/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com