Come posso SELECTl'ultima riga in una tabella MySQL?
Sto utilizzando INSERTi dati e devo recuperare un valore di colonna dalla riga precedente.
C'è un auto_incrementnel tavolo.
auto_incrementdentro. Vorrei l'ultimo aggiunto.
Come posso SELECTl'ultima riga in una tabella MySQL?
Sto utilizzando INSERTi dati e devo recuperare un valore di colonna dalla riga precedente.
C'è un auto_incrementnel tavolo.
auto_incrementdentro. Vorrei l'ultimo aggiunto.
Risposte:
Sì, c'è un auto_increment in là
Se vuoi l'ultima di tutte le righe nella tabella, allora questo è finalmente il momento in cui MAX(id)è la risposta giusta! Tipo:
SELECT fields FROM table ORDER BY id DESC LIMIT 1;
idè indicizzato.
Tenere presente che le tabelle nei database relazionali sono solo insiemi di righe. E i set in matematica sono raccolte non ordinate. Non esiste la prima o l'ultima riga; nessuna riga precedente o riga successiva.
Dovrai prima ordinare il tuo set di righe non ordinate in base a qualche campo, quindi sarai libero dall'iterazione attraverso il set di risultati nell'ordine che hai definito.
Dato che hai un campo con incremento automatico, suppongo che tu voglia che sia il campo di ordinamento. In tal caso, potresti voler fare quanto segue:
SELECT *
FROM your_table
ORDER BY your_auto_increment_field DESC
LIMIT 1;
Guarda come stiamo prima ordinando l'insieme di righe non ordinate per your_auto_increment_field(o come lo hai chiamato) in ordine decrescente. Quindi limitiamo il gruppo di risultati solo alla prima riga con LIMIT 1.
È possibile combinare due query suggerite da @spacepille in una singola query simile alla seguente:
SELECT * FROM `table_name` WHERE id=(SELECT MAX(id) FROM `table_name`);
Dovrebbe funzionare velocissimo, ma sui tavoli INNODB è una frazione di millisecondo più lenta di ORDER + LIMIT.
answered Jun 14 at 9:41circa 1 anno e 6 mesi prima :)
sulle tabelle con molte righe sono due query probabilmente più veloci ...
SELECT @last_id := MAX(id) FROM table;
SELECT * FROM table WHERE id = @last_id;
Fallo semplicemente usare: PDO::lastInsertId
Quasi ogni tabella di database, c'è una colonna auto_increment (generalmente id)
Se vuoi l'ultima di tutte le righe nella tabella,
SELECT columns FROM table ORDER BY id DESC LIMIT 1;
O
È possibile combinare due query in un'unica query simile alla seguente:
SELECT columns FROM table WHERE id=(SELECT MAX(id) FROM table);
SELECT * FROM adds where id=(select max(id) from adds);
Questa query è stata utilizzata per recuperare l'ultimo record nella tabella.
Molte risposte qui dicono lo stesso (ordine in base all'incremento automatico), che è OK, a condizione che tu abbia una colonna autoincrementata che è indicizzata.
In una nota a margine, se si dispone di tale campo ed è la chiave primaria, non vi è alcuna penalità di prestazione per l'utilizzo order bycontro select max(id). La chiave primaria è il modo in cui i dati vengono ordinati nei file del database (almeno per InnoDB) e RDBMS sa dove finiscono quei dati e può ottimizzare order by id + limit 1per essere uguale a raggiungere ilmax(id)
Ora la strada meno percorsa è quando non si dispone di una chiave primaria autoincrementata. Forse la chiave primaria è una chiave naturale, che è un composto di 3 campi ... Tuttavia, non tutto è perduto. Da un linguaggio di programmazione puoi prima ottenere il numero di righe con
SELECT Count(*) - 1 AS rowcount FROM <yourTable>;
e quindi utilizzare il numero ottenuto nella LIMITclausola
SELECT * FROM orderbook2
LIMIT <number_from_rowcount>, 1
Sfortunatamente, MySQL non consentirà una sottoquery o una variabile utente nella LIMITclausola