2010-11-01 98 views
121

我如何才能SELECT MySQL表中的最后一行?在MySQL中选择最后一行

我是INSERT ing数据,我需要从上一行检索列值。表格中有auto_increment

+5

定义“最后一行”。 ID最高的那个?还是最近添加的? – EboMike 2010-11-01 23:21:26

+1

什么表示最后一行 - 表中是否有auto_increment或DATETIME列? – 2010-11-01 23:21:29

+0

是的,里面有一个'auto_increment'。我想要最近添加的一个。 – esqew 2010-11-01 23:21:54

回答

272

是的,有一个auto_increment在那里

如果你想在最后的所有在表中的行,那么这是最后其中MAX(id)是正确的答案的时候了!种:

SELECT fields FROM table ORDER BY id DESC LIMIT 1; 
+3

http://stackoverflow.com/a/21683753/257319 – 2014-07-16 20:07:33

+3

恐怕如果它需要对数百万行进行排序,这会变得很慢,不是吗? – Slawa 2016-12-08 23:37:07

20

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

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

既然你有一个自动递增的字段,我假设你希望它是排序字段。在这种情况下,你可能要做到以下几点:

SELECT * 
FROM  your_table 
ORDER BY your_auto_increment_field DESC 
LIMIT  1; 

查看如何我们首先由your_auto_increment_field排序集无序的行(或任何你把它叫)的降序排列。然后我们将结果集限制在LIMIT 1的第一行。

4

如果您需要最近添加的时间戳,请添加时间戳并按最高时间戳顺序选择排序,限制为1.如果您想按ID排序,请按ID排序。如果您想使用您刚添加的那个,请使用mysql_insert_id

与许多行的表
16

可能是两个查询速度更快...

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

SELECT * FROM table WHERE id = @last_id; 
6

让它简单地使用:PDO::lastInsertId

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

+2

没错。大多数体面的MySQL接口库都有专门的方法,但是这个问题没有被标记为PHP,而是一般的MySQL语法。 – vzr 2017-04-12 13:26:21

9

你可以结合两个查询建议的@spacepille成单查询看起来像这样:

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

它应该快速工作,但在INNODB表中它比ORDER + LIMIT慢了几分之一毫秒。

+0

这个答案是@karthikeyan的回复的副本...看到帖子时间晚了... – Dwza 2016-06-17 11:50:46

+0

@karthikeyan在四天前写下了他的回答,我在2015年12月回答了这个问题。 – vzr 2016-06-18 12:45:10

+0

nope,我编辑并更正了一些拼写4几天前...发布日期是2014年'回答6月14日9:41'这就是大约1年和6个月前:) – Dwza 2016-06-21 09:57:01

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

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

-1

为什么大家都提到订单,最大等?

考虑到数以百万计的条目,这不是CPU友好。

更有效的解决方案是制作触发器,将其添加到单独的表中的一行。这样您可以在O(1)时间获得值。