我如何SELECT
MySQL表中的最后一行?
我是INSERT
数据,我需要从上一行检索列值。
表格中有一个auto_increment
。
答案 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
答案 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>;
子句中使用子查询或用户变量