我正在尝试检索一个表 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");
我正在尝试检索一个表 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");
在 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;
您可以按 id 对表格进行降序排序,并将结果数限制为一个:
SELECT id FROM tablename ORDER BY id DESC LIMIT 1
但是: 为此请求ORDER BY
重新排列整个表。因此,如果您有大量数据并且需要多次重复此操作,我不推荐此解决方案。
我有不同的解决方案:
SELECT AUTO_INCREMENT - 1 as CurrentId FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbname' AND TABLE_NAME = 'tablename'
InnoDB 使用以下算法为包含名为 ai_col 的 AUTO_INCREMENT 列的表 t 初始化自动增量计数器:在服务器启动后,对于表 t 的第一次插入,InnoDB 执行此语句的等效项:
SELECT MAX(ai_col) FROM t FOR UPDATE;
InnoDB 将语句检索到的值加一,并将其分配给列和表的自动增量计数器。如果表为空,则 InnoDB 使用值 1。
您也可以使用SHOW TABLE STATUS及其“Auto_increment”值。
我想为每条记录添加时间戳并获取最新的。在这种情况下,您可以获得任何 id、pack 行和其他操作。