【发布时间】:2013-10-23 01:49:28
【问题描述】:
我对我的数据库进行了以下调用,以从 AUTO_INCREMENT 列中检索最后一行 ID,我用它来查找下一行 ID:
$result = $mysqli->query("SELECT articleid FROM article WHERE articleid=(SELECT MAX(articleid) FROM article)");
$row = $result->fetch_assoc();
$last_article_id = $row["articleid"];
$last_article_id = $last_article_id + 1;
$result->close();
然后我使用$last_article_id 作为文件名系统的一部分。
这工作得很好......直到我删除了一行,这意味着调用检索的 ID 比我想要的顺序更靠后。
一个例子是:
ID
0
1
2
3
4-(deleted row)
5-(deleted row)
6-(next ID to be used for INSERT call)
我希望文件名类似于 6-0.jpg,但文件名最终为 4-0.jpg,因为它以 ID 为目标>3 + 1等...等...
当任何数量的先前行被删除时,我如何获得下一个 MySQL 行 ID 有什么想法吗??
【问题讨论】:
-
只是一个指针。如果你想要最大值,你可以做
SELECT MAX(articleid) FROM article。您不必执行子查询 -
不能在插入时获取 id (mysql_insert_id) 并使用它
-
为什么在删除时不使用条件,包含:
$last_article_id--?顺便说一句,你可以有$last_article_id = (int)$row['articleid']++,你应该确保$row->num_rows > 0。 -
@dagon 不幸的是,我在我的脚本的不同部分生成文件名到 INSERT 语句。文件名是之前生成的。
-
@PHPglue 我将测试 $last_article_id 增量方法,谢谢。关于您的 ID 解决方案,我认为这行不通,因为用户可以按任何顺序删除任意数量的行......尽管我可能读错了您的解决方案