16

我正在尝试检索一个表 A 的 id 以插入到另一个表 B 中。我不能使用 last_insert_id() 因为我没有在 A 中插入任何东西。关于如何很好地做到这一点的任何想法?

$n = mysql_query("SELECT max(id) FROM tablename");似乎不起作用,也没有

$n = mysql_query("SELECT max(id) FROM tablename GROUP BY id");
4

5 回答 5

40

在 MySQL 中,这确实返回列中的最大值id

SELECT MAX(id) FROM tablename;

但是,这不会将该 id 放入$n

$n = mysql_query("SELECT max(id) FROM tablename");

要获取值,您需要执行以下操作:

$result = mysql_query("SELECT max(id) FROM tablename");

if (!$result) {
    die('Could not query:' . mysql_error());
}

$id = mysql_result($result, 0, 'id');

如果要从 A 获取最后一个插入 ID,并将其插入 B,可以使用一个命令完成:

INSERT INTO B (col) SELECT MAX(id) FROM A;
于 2010-06-28T15:33:01.810 回答
13

您可以按 id 对表格进行降序排序,并将结果数限制为一个:

SELECT id FROM tablename ORDER BY id DESC LIMIT 1

但是: 为此请求ORDER BY重新排列整个表。因此,如果您有大量数据并且需要多次重复此操作,我不推荐此解决方案。

于 2016-07-29T10:50:12.693 回答
4

我有不同的解决方案:

SELECT AUTO_INCREMENT - 1 as CurrentId FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbname' AND TABLE_NAME = 'tablename'
于 2019-08-28T04:59:21.137 回答
1

可以获得最大列值并增加它

InnoDB 使用以下算法为包含名为 ai_col 的 AUTO_INCREMENT 列的表 t 初始化自动增量计数器:在服务器启动后,对于表 t 的第一次插入,InnoDB 执行此语句的等效项:

SELECT MAX(ai_col) FROM t FOR UPDATE;

InnoDB 将语句检索到的值加一,并将其​​分配给列和表的自动增量计数器。如果表为空,则 InnoDB 使用值 1。

您也可以使用SHOW TABLE STATUS及其“Auto_increment”值。

于 2010-06-28T15:35:10.257 回答
0

我想为每条记录添加时间戳并获取最新的。在这种情况下,您可以获得任何 id、pack 行和其他操作。

于 2010-06-28T15:34:43.570 回答