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