[英]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
如果要添加最近的时间戳,请添加一个时间戳,然后选择按最高时间戳(限制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 by
与select 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.