【问题标题】:Multi line insert and return ids多行插入和返回 ID
【发布时间】:2013-06-07 16:44:44
【问题描述】:

免责声明:我正在处理使用 mysql 函数而不是 mysqli 函数的旧代码。我无法使用更新的功能来改造代码,并且必须在旧的、过时的功能中工作。 我知道这不是最佳做法。

我们正在尝试使用多行INSERT,但随后需要为每个插入的行提取mysql_insert_id()。这可能吗?

例子:

INSERT INTO banner (date, count) VALUES ('2013-06-06', 1), ('2013-06-07', 1), ('2013-06-08', 2);

然后如何获取每行的 insert_id?

【问题讨论】:

  • 不能,只能抓取最后插入的id。你也错过了第一次约会的单引号。
  • 我不认为你可以。编写一个查询,根据插入的数据获取行的 ID 字段(假设它们是唯一的)。
  • 您可以插入多个语句并在每个语句之后使用mysql_insert_id() 创建一个包含所有输入ID 的数组以供以后使用。这会变慢,但我没有看到任何其他方式
  • 也许您可以将值放入一个数组中,遍历该数组 - 在每次迭代时插入一行 - 然后将 mysql_insert_id() 保存到一个结果数组中。
  • 有一次我问了一个类似的问题(不完全重复):stackoverflow.com/questions/6895679/…

标签: php mysql


【解决方案1】:

我会使用事务并遍历您的数据:

--- DB SET AUTOCOMMIT TO FALSE ---

--- DB START TRANSACTION ---

--- LOOP BEGIN ---

    --- INSERT ONE ROW ---

    --- YOU CAN FETCH LAST_INSERT_ID HERE AND USE/STORE IT ---

--- LOOP END ---

--- DB END TRANSACTION (COMMIT) ---

--- DB SET AUTOCOMMIT BACK TO TRUE ---

(伪代码)

【讨论】:

    【解决方案2】:

    也许你可以采取不同的方法来解决这个问题。

    由于您只会获得最后插入的行的 ID,因此您可以根据插入的行数轻松获得所有 ID(前提是您使用 AUTO_INCREMENT,从您的代码中看起来是这样,并且您知道每次插入多少行)。您可以轻松地从最后一个 ID 子跟踪添加的项目数量,并获得所需的 ID 范围。

    范围从Last ID - rows added + 1Last ID

    例如,如果您插入 5 行并获得 42 的 ID,则 ID 列表将为:38、39、40、41、42。

    【讨论】:

    • 如果多个用户同时插入,则无法保证。
    • 如果他无法控制插入并且有并发插入,这将无法解决。
    • @EvanMulawski 同意!我使用从问题中获得的尽可能多的信息提出了建议......
    • 是的,他们是对的我不能保证没有多个用户插入。我想我将不得不为这种情况稍微重组表格。谢谢!
    猜你喜欢
    • 2013-07-02
    • 2019-07-05
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 2016-11-27
    相关资源
    最近更新 更多