Wie kann ich SELECT
die letzte Zeile in einer MySQL-Tabelle?
Ich habe INSERT
Daten und muss einen Spaltenwert aus der vorherigen Zeile abrufen.
Da ist ein auto_increment
in der Tabelle.
auto_increment
drin. Ich möchte die zuletzt hinzugefügte.
Wie kann ich SELECT
die letzte Zeile in einer MySQL-Tabelle?
Ich habe INSERT
Daten und muss einen Spaltenwert aus der vorherigen Zeile abrufen.
Da ist ein auto_increment
in der Tabelle.
auto_increment
drin. Ich möchte die zuletzt hinzugefügte.
Antworten:
Ja, da ist ein auto_increment drin
Wenn Sie die letzte aller Zeilen in der Tabelle möchten , dann ist dies endlich die Zeit, in der MAX(id)
die richtige Antwort ist! So'ne Art:
SELECT fields FROM table ORDER BY id DESC LIMIT 1;
id
indiziert ist.
Beachten Sie, dass Tabellen in relationalen Datenbanken nur Sätze von Zeilen sind. Und Mengen in der Mathematik sind ungeordnete Sammlungen. Es gibt keine erste oder letzte Zeile; Keine vorherige oder nächste Zeile.
Sie müssen zuerst Ihre ungeordneten Zeilen nach einem Feld sortieren, und dann können Sie die Ergebnismenge in der von Ihnen definierten Reihenfolge durchlaufen.
Da Sie ein automatisch inkrementierendes Feld haben, gehe ich davon aus, dass dies das Sortierfeld sein soll. In diesem Fall möchten Sie möglicherweise Folgendes tun:
SELECT *
FROM your_table
ORDER BY your_auto_increment_field DESC
LIMIT 1;
Sehen Sie, wie wir zuerst die Menge der ungeordneten Zeilen nach your_auto_increment_field
(oder wie auch immer Sie sie nennen) in absteigender Reihenfolge sortieren . Dann beschränken wir die Ergebnismenge auf nur die erste Zeile mit LIMIT 1
.
Sie können zwei von @spacepille vorgeschlagene Abfragen zu einer einzigen Abfrage kombinieren, die folgendermaßen aussieht:
SELECT * FROM `table_name` WHERE id=(SELECT MAX(id) FROM `table_name`);
Es sollte blitzschnell funktionieren, aber auf INNODB-Tabellen ist es ein Bruchteil einer Millisekunde langsamer als ORDER + LIMIT.
answered Jun 14 at 9:41
das ist ungefähr 1 Jahr und 6 Monate früher :)
Machen Sie es einfach verwenden: PDO::lastInsertId
Wenn Sie den zuletzt hinzugefügten möchten, fügen Sie einen Zeitstempel hinzu und wählen Sie in umgekehrter Reihenfolge nach dem höchsten Zeitstempel geordnet, Limit 1. Wenn Sie nach ID gehen möchten, sortieren Sie nach ID. Wenn Sie die gerade hinzugefügte verwenden möchten, verwenden Sie mysql_insert_id
.
Fast jede Datenbanktabelle enthält eine Spalte auto_increment (im Allgemeinen id).
Wenn Sie die letzte aller Zeilen in der Tabelle möchten,
SELECT columns FROM table ORDER BY id DESC LIMIT 1;
ODER
Sie können zwei Abfragen zu einer einzigen Abfrage kombinieren, die folgendermaßen aussieht:
SELECT columns FROM table WHERE id=(SELECT MAX(id) FROM table);
SELECT * FROM adds where id=(select max(id) from adds);
Diese Abfrage wurde verwendet, um den letzten Datensatz in Ihrer Tabelle abzurufen.
Viele Antworten hier sagen dasselbe (Reihenfolge nach Ihrem automatischen Inkrement), was in Ordnung ist, vorausgesetzt, Sie haben eine automatisch inkrementierte Spalte, die indiziert ist.
Auf einer Seite beachten, wenn Sie ein solches Feld haben , und es ist der Primärschlüssel, gibt es keine Performance - Einbußen für die Verwendung im order by
Vergleich select max(id)
. Der Primärschlüssel ist die Reihenfolge der Daten in den Datenbankdateien (zumindest für InnoDB). Das RDBMS weiß, wo diese Daten enden, und kann so optimiert werden order by id + limit 1
, dass es mit dem Erreichen der Daten übereinstimmtmax(id)
Jetzt ist die Straße weniger befahren, wenn Sie keinen automatisch inkrementierten Primärschlüssel haben. Vielleicht ist der Primärschlüssel ein natürlicher Schlüssel, der aus 3 Feldern besteht ... Es ist jedoch nicht alles verloren. Aus einer Programmiersprache können Sie zunächst die Anzahl der Zeilen mit abrufen
SELECT Count(*) - 1 AS rowcount FROM <yourTable>;
und verwenden Sie dann die erhaltene Nummer in der LIMIT
Klausel
SELECT * FROM orderbook2
LIMIT <number_from_rowcount>, 1
Leider lässt MySQL keine Unterabfrage oder Benutzervariable in der LIMIT
Klausel zu