Pek*_*ica 356
是的,那里有一个auto_increment
如果你想要表中所有行的最后一行,那么这最终MAX(id)是正确答案的时间!的种类:
SELECT fields FROM table ORDER BY id DESC LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
Dan*_*llo 29
请记住,关系数据库中的表只是行集.数学中的集合是无序集合.没有第一行或最后一行; 没有上一行或下一行.
您必须首先按某些字段对无序行进行排序,然后按照您定义的顺序自由迭代结果集.
由于您有一个自动递增字段,我假设您希望它是排序字段.在这种情况下,您可能希望执行以下操作:
SELECT *
FROM your_table
ORDER BY your_auto_increment_field DESC
LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
看看我们是如何your_auto_increment_field按降序排序(或任何你调用的)无序行的排序.然后我们将结果集限制为第一行LIMIT 1.
小智 24
在有很多行的表上,两个查询可能更快......
SELECT @last_id := MAX(id) FROM table;
SELECT * FROM table WHERE id = @last_id;
Run Code Online (Sandbox Code Playgroud)
vzr*_*vzr 17
您可以将@spacepille建议的两个查询组合成单个查询,如下所示:
SELECT * FROM `table_name` WHERE id=(SELECT MAX(id) FROM `table_name`);
Run Code Online (Sandbox Code Playgroud)
它应该快速工作,但在INNODB表上,它比ORDER + LIMIT慢几分之一.
简单地使用: PDO::lastInsertId
http://php.net/manual/en/pdo.lastinsertid.php
如果要最近添加的,请添加时间戳并选择按最高时间戳倒序排序,限制为 1。如果要按 ID 排序,则按 ID 排序。如果您想使用刚刚添加的那个,请使用mysql_insert_id.
几乎每个数据库表,都有一个 auto_increment 列(一般是 id )
如果你想要表中所有行的最后一个,
SELECT columns FROM table ORDER BY id DESC LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
或者
您可以将两个查询合并为一个查询,如下所示:
SELECT columns FROM table WHERE id=(SELECT MAX(id) FROM table);
Run Code Online (Sandbox Code Playgroud)
这里的许多答案都说相同的(按自动增量排序),这没问题,前提是您有一个已编入索引的自动增量列。
附带说明一下,如果您有这样的字段并且它是主键,那么使用order byvs不会有性能损失select max(id)。主键是数据在数据库文件中的排序方式(至少对于 InnoDB),RDBMS 知道数据在哪里结束,它可以优化order by id + limit 1到与到达相同的max(id)
现在少有人走的路是当您没有自动递增的主键时。也许主键是一个自然键,它是 3 个字段的组合......不过,并不是所有的都丢失了。从编程语言中,您可以首先获得行数
SELECT Count(*) - 1 AS rowcount FROM <yourTable>;
Run Code Online (Sandbox Code Playgroud)
然后在LIMIT子句中使用获得的数字
SELECT * FROM orderbook2
LIMIT <number_from_rowcount>, 1
Run Code Online (Sandbox Code Playgroud)
不幸的是,MySQL 不允许子查询或LIMIT子句中的用户变量