繁体   English   中英

选择MySQL中的最后一行

[英]Select last row in MySQL

如何在MySQL表中SELECT最后一行?

我正在INSERT数据,我需要从上一行中检索列值。

表格中有一个auto_increment

是的,那里有一个auto_increment

如果您想要表中所有行的最后一行 ,那么最后就是使用MAX(id)正确答案的时候了! 的种类:

SELECT fields FROM table ORDER BY id DESC LIMIT 1;

请记住,关系数据库中的表只是行的集合。 数学中的集合是无序集合。 没有第一行或最后一行; 没有上一行或下一行。

您必须先按某个字段对一组无序行进行排序,然后才能按照定义的顺序释放结果集中的迭代。

由于您具有自动递增字段,因此我假设您希望将其作为排序字段。 在这种情况下,您可能需要执行以下操作:

SELECT    *
FROM      your_table
ORDER BY  your_auto_increment_field DESC
LIMIT     1;

看看我们如何首先按your_auto_increment_field (或您调用的任何名称)以降序对一组无序行进行排序。 然后,我们将结果集限制为LIMIT 1到第一行。

在具有很多行的表上,两个查询可能更快

SELECT @last_id := MAX(id) FROM table;

SELECT * FROM table WHERE id = @last_id;

您可以将@spacepille建议的两个查询组合成一个看起来像这样的查询:

SELECT * FROM `table_name` WHERE id=(SELECT MAX(id) FROM `table_name`);

它应该工作得很快,但是在INNODB表上,它比ORDER + LIMIT慢了几分之一秒。

使其简单使用: PDO::lastInsertId

http://php.net/manual/zh/pdo.lastinsertid.php

如果要添加最近的时间戳,请添加一个时间戳,然后选择按最高时间戳(限制1)的相反顺序排列。如果要按ID排序,请按ID排序。 如果要使用您刚添加的那个,请使用mysql_insert_id

SELECT * FROM adds where id=(select max(id) from adds);

该查询用于获取表中的最后一条记录。

您可以在LIMIT命令中使用OFFSET

SELECT * FROM aTable LIMIT 1 OFFSET 99

如果您的表有100行,则不依赖primary_key返回最后一行

如果您有一个自动索引的列,那么这里的许多答案都说相同(按自动递增的顺序),这是可以的。

附带说明一下,如果您有这样的字段并且它主键,那么使用order byselect max(id)不会对性能造成任何影响。 主键是如何对数据库文件中的数据进行排序(至少对于InnoDB),并且RDBMS知道数据的结束位置,并且可以order by id + limit 1来优化order by id + limit 1使其与达到max(id)

现在,当您没有自动递增的主键时,人迹罕至的地方。 也许主键是一个自然键,它是3个字段的组合...但是,并不是全部都丢失了。 从编程语言中,您可以首先获取行数

SELECT Count(*) - 1 AS rowcount FROM <yourTable>;

然后在LIMIT子句中使用获得的数字

SELECT * FROM orderbook2
LIMIT <number_from_rowcount>, 1

不幸的是,MySQL在LIMIT子句中不允许子查询或用户变量

几乎每个数据库表都有一个auto_increment列(通常为id)

如果您想要表格中所有行的最后一行,

SELECT columns FROM table ORDER BY id DESC LIMIT 1;

要么

您可以将两个查询组合成一个看起来像这样的查询:

SELECT columns FROM table WHERE id=(SELECT MAX(id) FROM table);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM