插入到数据库的最后一个 id


Last id's that were inserted to database

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

您可以使用

mysql_affected_rows mysql函数来查找最后一个受影响的行。这是文档。

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

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

SELECT id FROM [yourTable] ORDER BY id DESC LIMIT 2

试试这个:

http://php.net/manual/en/function.mysql-insert-id.php

对于 SQL 的ORDER-BY来说太微不足道了:

SELECT * FROM table ORDER BY id DESC LIMIT 2 

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

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

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

您还可以考虑将行归因于用户,这将消除任何数据冲突的可能性,然后该方法非常简单:

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

当然,像这样的决策取决于应用的结构。

正如AndreiCristianProdan在评论中所说:自动递增ID。然后像这样:

SELECT * FROM tableName LIMIT 1 ORDER BY ID DESC

没有两行会恰好同时生效。这将始终选择表中的最后一行。

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

WHERE `user_id` = 'UserIdHere'

到 SQL 语句。

希望有帮助。