选择MySQL中的最后一行

时间:2010-11-01 23:20:36

标签: mysql

我如何SELECT MySQL表中的最后一行?

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

表格中有一个auto_increment

10 个答案:

答案 0 :(得分:335)

  

是的,那里有一个auto_increment

如果您想要表格中所有行的最后一行,那么这最终是MAX(id)是正确答案的时间!种类:

SELECT fields FROM table ORDER BY id DESC LIMIT 1;

答案 1 :(得分:27)

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

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

由于您有一个自动递增字段,我假设您希望它是排序字段。在这种情况下,您可能需要执行以下操作:

SELECT    *
FROM      your_table
ORDER BY  your_auto_increment_field DESC
LIMIT     1;

看看我们是如何按降序顺序排列your_auto_increment_field(或者你叫它的任何东西)的无序行集。然后我们将结果集限制为LIMIT 1的第一行。

答案 2 :(得分:22)

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

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

SELECT * FROM table WHERE id = @last_id;

答案 3 :(得分:15)

您可以将@spacepille建议的两个查询合并为单个查询,如下所示:

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

它的工作速度非常快,但在INNODB表上,它比ORDER + LIMIT慢了几分之一。

答案 4 :(得分:7)

简单地使用:PDO::lastInsertId

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

答案 5 :(得分:4)

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

答案 6 :(得分:2)

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

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

答案 7 :(得分:0)

您可以在OFFSET命令中使用LIMIT

SELECT * FROM aTable LIMIT 1 OFFSET 99

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

答案 8 :(得分:0)

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

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

SELECT columns FROM table ORDER BY id DESC LIMIT 1;

OR

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

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

答案 9 :(得分:0)

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

请注意,如果您有这样的字段且主键,则使用<div class="mw-parser-output"><p>不会造成性能损失。主键是如何对数据库文件中的数据进行排序(至少对于InnoDB而言),并且RDBMS知道数据的结束位置,并且它可以优化soup.find("div", attrs={"class":"mw-parser-output"}).select("p:nth-of-type(1)") 使其与到达order by相同/ p>

现在,当您没有自动递增的主键时,行人较少的道路。也许主键是自然键,它是3个字段的组合... 但是,并不是所有的东西都丢失了。首先,您可以从编程语言中获取行数

select max(id)

,然后在order by id + limit 1子句中使用获得的数字

max(id)

不幸的是,MySQL不允许在SELECT Count(*) - 1 AS rowcount FROM <yourTable>; 子句中使用子查询或用户变量