2010-11-01 13 views
121

Come posso SELECT l'ultima riga in una tabella MySQL?Seleziona l'ultima riga in MySQL

Sono INSERT dati di ing e ho bisogno di recuperare un valore di colonna dalla riga precedente.

C'è un auto_increment nella tabella.

+5

Definire "ultima riga". Quello con l'ID più alto? O l'ultimo aggiunto? – EboMike

+1

Cosa indica l'ultima riga: c'è una colonna auto_increment o DATETIME nella tabella? –

+0

Sì, c'è un 'auto_increment' qui. Mi piacerebbe l'ultimo aggiunto. – esqew

risposta

272

Sì, c'è un auto_increment in là

Se si desidera che l'ultimo dei tutte le righe nella tabella, allora questo è finalmente il momento in cui MAX(id) è la risposta giusta! Tipo di:

SELECT fields FROM table ORDER BY id DESC LIMIT 1; 
+3

http://stackoverflow.com/a/21683753/257319 –

+3

Ho paura che questo si rallenti se è necessario ordinare milioni di righe, non è vero? – Slawa

20

Tenere presente che le tabelle nei database relazionali sono solo serie di righe. E gli insiemi in matematica sono collezioni non ordinate. Non esiste la prima o l'ultima riga; nessuna riga precedente o successiva.

Prima di tutto occorre ordinare il set di righe non ordinate per alcuni campi, quindi l'iterazione viene liberata attraverso il set di risultati nell'ordine definito.

Poiché si dispone di un campo di incremento automatico, presumo che si desideri che sia il campo di ordinamento. In tal caso, si consiglia di effettuare le seguenti operazioni:

SELECT * 
FROM  your_table 
ORDER BY your_auto_increment_field DESC 
LIMIT  1; 

Guarda come stiamo prima l'ordinamento del set di righe non ordinate dal your_auto_increment_field (o quello che avete chiamato) in ordine decrescente. Quindi limitiamo il set di risultati alla sola prima riga con LIMIT 1.

4

Se si desidera aggiungere uno più recente, aggiungere un timestamp e selezionare ordinato in ordine inverso per data/ora più elevata, limite 1. Se si desidera passare per ID, ordinare per ID. Se si desidera utilizzare quello aggiunto, utilizzare mysql_insert_id.

16

su tabelle con molte righe sono due query probabilmente più veloce ...

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

SELECT * FROM table WHERE id = @last_id; 
6

Make it semplicemente utilizzare: PDO::lastInsertId

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

+2

Giusto. Le più decenti librerie di interfacce MySQL hanno metodi dedicati per questo, tuttavia questa domanda non è stata codificata in PHP, ma la sintassi generale di MySQL. – vzr

9

è possibile combinare due query suggerito da @spacepille in singola query che assomiglia a questa:

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

Dovrebbe funzionare rapidamente, ma sulle tabelle INNODB la frazione di un millisecondo è inferiore a ORDER + LIMIT.

+0

questa risposta è una copia della risposta di @karthikeyan ... ha visto l'ora del post in ritardo ... – Dwza

+0

@karthikeyan ha scritto la sua risposta quattro giorni fa e ho risposto a questa domanda nel dicembre 2015. – vzr

+0

no, ho modificato e corretto alcune ortografie 4 giorni fa ... la data del post è il 2014 "ha risposto il 14 giugno alle 9: 41' questo è circa 1 anno e 6 mesi prima :) – Dwza

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

Questa query è stata utilizzata per recuperare l'ultimo record nella tabella.

-1

Perché tutti si riferiscono all'ordine, al massimo, ecc.?

Questo non è molto cpu friendly considerando milioni e milioni di voci.

Una soluzione più efficiente farebbe un trigger che si aggiunge a una riga in una tabella separata. In questo modo puoi ottenere il valore al tempo O (1).