获取MySQL表中的最后一条记录

23

我基本上正在尝试制作一个“目标”进度条。目标是通过获取我在MySQL表中进行的最后一次输入来确定的。因此,我想要获取最后一次输入的ID。

如何获取表格中的最后一条记录并从该记录中获取ID?

(使用PHP)


你是否有一个类似于id的自动递增字段? - Jeremy Harris
你需要记录一个时间戳以确保获取最新的条目。 - Michael Mior
@MichaelMior,绝不可能!时间戳的分辨率远远无法保证这一点。 - Brad
@cillosis 是的,我有一个自动递增的字段,它就是id。 - ComputerLocus
@Brad 如果需要每秒多次更新,那当然可以。 - Michael Mior
显示剩余4条评论
8个回答

59
获取最大的id:

要获取最大的id:

SELECT MAX(id) FROM mytable

然后获取行:

SELECT * FROM mytable WHERE id = ???

或者,你可以在一个查询中完成所有操作:

SELECT * FROM mytable ORDER BY id DESC LIMIT 1

谢谢!我认为其他人把它弄得比必要的复杂了。我想我的问题本可以更好地表达。我只是需要最大的ID。谢谢! - ComputerLocus

7
您可以使用LAST_INSERT_ID()函数。例如:
$sql = "SELECT * FROM mytable WHERE id = LAST_INSERT_ID()";

谢谢,尽管我会使用Eric回答的那个,但这个看起来也可以! - ComputerLocus
5
关于LAST_INSERT_ID的注释:LAST_INSERT_ID返回当前连接插入的最后一行的ID,而不是其他连接的。 - laltin

6
您可以使用此查询来获取您想要的结果,如本示例中所使用的 SQL 查询:
$sql = "SELECT user_id FROM my_users_table ORDER BY user_id DESC LIMIT 0,1";

谢谢,但我会使用Eric的,尽管这也可能有效! - ComputerLocus
没问题,伙计。我希望这个线程能够恰当地解决你的问题=) - Rasmus Søborg

3
为了可靠地实现这一点,您必须在表中拥有某些字段,以便您可以检查确定哪个是最后一个。这可以是添加记录时的时间戳,不断增加的序列号(特别是自动递增的序列号)等。
然后,假设它是称为“rec_seq”的序列号。您将编写类似以下内容的代码:
select * from my_table
where rec_seq=(select max(rec_seq) from my_table)

看起来有点像Eric的答案,但我还是要采用Eric的答案! - ComputerLocus
没问题,他的方案稍微简单一些,是更容易的解决方案。 - Jay

2

如果字段是自动递增的,则可以使用LAST_INSERT_ID函数。


1
这假设你刚刚插入了行。 - Michael Mior

2

从表中选择所有字段,按相反顺序排列并设置限制为0,1。这将给您表字段数据的最后一个结果。


2
获取用户最新条目。
'SELECT user_id FROM table_name WHERE user_id = '.$userid.' ORDER BY user_id DESC LIMIT 1';

0

以上答案展示了如何通过id获取最新条目。如果使用非递增的id,比如UUID作为键,这种方法就不适用。在这种情况下,可以使用一个created_at列代替。

-- highest id
SELECT * FROM some_table ORDER BY id DESC LIMIT 1;

-- latest created at date
SELECT * FROM some_table ORDER BY created_at DESC LIMIT 1;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接