SELECT last id,没有INSERT

时间:2010-06-28 15:24:00

标签: mysql lastinsertid

我正在尝试检索一个表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");

5 个答案:

答案 0 :(得分:27)

在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;

答案 1 :(得分:3)

您可以按ID顺序对tabele进行降序排序,并将结果数限制为一个:

SELECT id FROM tablename ORDER BY id DESC LIMIT 1

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

答案 2 :(得分:0)

我认为要为每条记录添加时间戳并获取最新信息。在这种情况下,您可以获取任何ID,打包行和其他操作。

答案 3 :(得分:0)

你可以get maximum column value and increment it

  

InnoDB使用以下算法   初始化自动增量计数器   对于包含一个表格的表格   名为ai_col的AUTO_INCREMENT列:   服务器启动后,第一个   插入到表t中,InnoDB执行   相当于这句话:

SELECT MAX(ai_col) FROM t FOR UPDATE;
     

InnoDB将值递增1   由声明检索并分配   它到列和   表的自动递增计数器。   如果表是空的,InnoDB使用   价值1。

此外,您可以使用SHOW TABLE STATUS及其“Auto_increment”值。

答案 4 :(得分:0)

我有不同的解决方案:

SELECT AUTO_INCREMENT - 1 as CurrentId FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbname' AND TABLE_NAME = 'tablename'