2010-11-01 100 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)時間獲得值。