【问题标题】:Last id's that were inserted to database插入数据库的最后一个 id
【发布时间】:2012-08-10 13:50:56
【问题描述】:

如果我能获得最近插入的数据行的 ID,我很感兴趣。我有一个用户可以填写的表格,他们可以克隆该表格,因此他们可以根据需要添加 10 个表格...我只需要插入的所有 id。那么这可能吗?

【问题讨论】:

  • 在插入数据的SQL之前,只需将id存入数组即可。
  • @AndreiCristianProdan 我假设 id 是由插入创建的(通过 AUTO_INCREMENT 列属性)

标签: php mysql


【解决方案1】:

您可以使用mysql_affected_rows mysql 函数查找最后受影响的行。 Here 是文档。

SET @uids := null;
UPDATE footable
   SET foo = 'bar'
 WHERE fooid > 5
   AND ( SELECT @uids := CONCAT_WS(',', fooid, @uids) );
SELECT @uids;

这将返回一个字符串,其中所有 ID 用冒号连接。

【讨论】:

  • 不客气,如果您觉得有帮助,别忘了点赞并将其标记为答案。
【解决方案2】:
SELECT id FROM [yourTable] ORDER BY id DESC LIMIT 2

【讨论】:

  • 一旦有2个不同的用户在表中同时插入记录,就会给出错误的结果。
【解决方案3】:
【解决方案4】:

SQL 的ORDER-BY 太琐碎了:

SELECT * FROM table ORDER BY id DESC LIMIT 2 

【讨论】:

  • 一旦有2个不同的用户在表中同时插入记录,就会给出错误的结果。
  • @Jocelyn:怎么样?那是因为两个用户的 id 相同?
【解决方案5】:

从简单的意义上说是不可能的;但是如果您需要这些 id,您可以更改逻辑以一次插入一个。

或者,您可以进行近似计算(合理程度取决于您的应用程序),但在插入之前选择 MAX(id),然后执行 select ... WHERE id > $prev_max AND name IN (implode(',', $names))(假设有一些字段,例如 name你可以这样使用。

您可以通过确保计数与插入的行数相同来验证所选行的有效性。使用两个因素(id > prev 类似于 name 列),当您像这样选择时,您极不可能获得其他人的插入。

你也可以考虑将行归属于用户,这样可以消除任何数据冲突的可能性,然后方法真的很简单:

SELECT * FROM my_table WHERE user_id = $userID ORDER BY id DESC LIMIT $qtyForms;

当然,这样的决定取决于您的应用的结构。

【讨论】:

    【解决方案6】:

    正如 AndreiCristianProdan 在评论中所说:自动增加 ID。然后是这样的:

    SELECT * FROM tableName LIMIT 1 ORDER BY ID DESC
    

    任何两行都不会同时-完全-同时生效。这将始终选择表格中的最后一行。

    如果您想要 - 仅 - 由一个用户影响的行,请将 user_id 字段添加到表中。然后添加

    WHERE `user_id` = 'UserIdHere'
    

    到 SQL 语句。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2012-10-13
      • 1970-01-01
      • 2023-03-14
      • 2011-06-01
      • 1970-01-01
      • 2023-03-16
      • 2011-04-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多