我在php中运行了1个脚本,因为我需要在订阅表中输入最后一个id。通过使用该ID,我想为该订阅制作通知备注。
我用过:
SELECT LAST_INSERT_ID() FROM subscription
我得到0而不是真正的最后插入值。
答案 0 :(得分:10)
如果您使用php
连接到mysql
,则可以使用mysql_insert_id()
指向上次插入的ID。
像这样:
mysql_query("INSERT INTO mytable (1, 2, 3, 'blah')");
$last_id = mysql_insert_id();
答案 1 :(得分:4)
LAST_INSERT_ID()
返回上一个insert语句的最后一个id。如果您想要最近插入的记录并使用自动增量Prime键,则可以使用以下代码:
SELECT MAX( id ) FROM subscription;
如果您需要了解 NEXT ID的内容,可以从INFORMATION_SCHEMA获取此内容
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'test'
答案 2 :(得分:3)
这个问题已经多次回答:MySQL: LAST_INSERT_ID() returns 0
您正在脱离上下文使用该功能。只有在你之前插入一行时它才会起作用:
INSERT INTO 'subscription' (name) VALUES ('John Smith');
SELECT LAST_INSERT_ID() FROM subscription
但是,您可以选择ID最高的行,逻辑上是最近添加的行...
SELECT MAX( id ) FROM subscription;
标准方法是简单地调用mysqli_insert_id
或mysql_insert_id
(取决于您使用的是mysqli还是mysql PHP库。我应该添加mysql库是非常不宜使用的,因为它几乎完全弃用)。这就是理想情况下的整体情况:
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
$mysqli->query("INSERT INTO 'subscription' (name) VALUES ('John Smith');");
printf ("New Record has id %d.\n", $mysqli->insert_id);
//Output is something like: New Record has id 999
但是,如果您没有在收集最新行ID的同一脚本中插入订阅,请使用“select max”方法。鉴于您提到'1 script'
,这似乎不太可能此外,如果您的ID不是连续的,或者您没有ID字段,或者您的行ID高于您刚刚添加的ID,那么您应该考虑使用'date_added'列确定哪一个真的是最新的。但是,这些情况不太可能发生。
答案 3 :(得分:2)
这是更好的方法2和3工作但MAX(id)需要更多时间来执行。
SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'dbName' AND TABLE_NAME = 'tableName';
SELECT tableName.id FROM tableName ORDER BY tableName.id DESC LIMIT 0,1;
SELECT MAX( id ) FROM tableName;
答案 4 :(得分:1)
这将始终为您提供最大ID,其中最大数字是最后一个插入的
SELECT MAX(id) as MaximumID FROM subscription;
答案 5 :(得分:1)
$last_id=mysql_query("SELECT id FROM `table_name` ORDER BY id DESC LIMIT 0 , 1" );
$row=mysql_fetch_assoc($last_id);
echo $row['id'];
将id
替换为您在数据库中的ID字段名称,并将table_name
替换为您的表名。