de.comp.lang.php.* FAQ

16.15. Wie bekomme ich den letzten Datensatz aus der Tabelle?

Keywords: SQL | Select | erster | letzter | Datensatz | Eintrag | Zeile

Antwort von Johannes Frömter

In einer relationalen Datenbank gibt es keine Reihenfolge, also keine "letzte Zeile", kein "oben" oder "unten". Jedwede definierte Reihenfolge entsteht erst beim Selektieren von Datensätzen und der Sortierung nach irgendeinem Sortierkriterium.

Um also den "ersten" oder "letzten" Datensatz selektieren zu können, muss die Tabelle eine Spalte vom Typ TIMESTAMP haben, die manuell oder automatisch auf das Eintrags- bzw. Änderungsdatum gesetzt wird. Anhand dieser Spalte kann das Ergebnis sortiert werden (ASC sortiert aufsteigend, DESC absteigend). Mit LIMIT wird das Ergebnis dann auf den ersten (oder die ersten n) Datensätze beschränkt:

SELECT xy FROM tabelle
ORDER BY datum DESC
LIMIT 1

Wenn das DBMS Subselects zulässt (für MySQL ist dies ab Version 4.x geplant), kann man alternativ auch folgendes schreiben:

SELECT xy FROM tabelle
WHERE datum = (SELECT MAX(datum) FROM tabelle)

Damit diese Selects effektiv vonstatten gehen, muss auf die Timestamp-Spalte ein Index gelegt werden. Die Verwendung eines Primärschlüssel- statt Timestamp-Feldes ist nicht empfohlen.

Valid HTML 4.01! Valid CSS!

16.15. Wie bekomme ich den letzten Datensatz aus der Tabelle?
http://www.php-faq.de/q/q-sql-letzter-eintrag.html
Archiv der de.comp.lang.php-FAQ Dies ist eine Archivseite von 2008 und wurde seitdem nicht geändert. Das dclp-FAQ-Team