letzte zeile auslesen
Xynon
- datenbank
Hi,
Wie kann ich mit einem SQL-Query oder per PHP den letzten Datensatz aus einer mysql tabelle auslesen?
Ich treffe in foren immer nur auf
SELECT COUNT(*) FROM table_name;
aber was ist wenn ein Datensatz gelöscht ist und die Tabelle nur noch 199 datensätze hat, dann ist die letzte ID immer noch 200 und
SELECT LAST(column_name) FROM table_name
wie hier funktioniert nicht, da kommt immer die Fehlermeldung:
#1064 - You have an error in your SQL syntax;
Wahrscheinlich weil es LAST in mysql nicht gibt, wenn ich mich nicht irre.
Was gebe es noch für möglichkeiten?
mfg Xynon
Hallo,
Wie kann ich mit einem SQL-Query oder per PHP den letzten Datensatz aus einer mysql tabelle auslesen?
definiere "letzter Datensatz".
aber was ist wenn ein Datensatz gelöscht ist und die Tabelle nur noch 199 datensätze hat, dann ist die letzte ID immer noch 200 und
Ist es der mit der höchsten ID?
SELECT LAST(column_name) FROM table_name
wie hier funktioniert nicht, da kommt immer die Fehlermeldung:
#1064 - You have an error in your SQL syntax;Wahrscheinlich weil es LAST in mysql nicht gibt, wenn ich mich nicht irre.
Nachgucken wäre eine Idee.
Was gebe es noch für möglichkeiten?
Die übliche, ein Subselect:
SELECT -- Gib mir
* -- den Datensatz
FROM -- aus
table_name t1 -- meiner Tabelle (angesprochen unter dem Alias t1),
WHERE -- wobei
t1.ID = ( -- die ID dieses Datensatzes gleich
SELECT -- der
MAX(t2.ID) -- größten ID
FROM -- aus
table_name t2 -- dieser Tabelle (zur Unterscheidung mit t2 angesprochen)
) -- sein soll.
Ich möchte noch anmerken, dass eine ID nur dazu da sein sollte, einen Datensatz eindeutig zu identifizieren - und darüber hinaus keine weitere Information tragen sollte. Auch nicht, welcher Datensatz der neueste ist. Verwende dazu eine eigene Spalte.
Freundliche Grüße
Vinzenz
Wahrscheinlich weil es LAST in mysql nicht gibt, wenn ich mich nicht irre.
Ungeachtet Vinzenz' Post glaube ich, dass du das Äquivalent zu TOP/LAST suchst - das wäre in MySQL die LIMIT-Optimierung.
Bez. der Reihung "neuere oder älterer Datensatz" stimme ich Vinzenz zu: hierfür muss ein anderes Merkmal definiert werden - ein Zeitstempel zb - die Reihung selbst kann über ein anderes Feld gesteuert werden.
Wie eine ID vergeben wird, liegt im ermessen des Systems - üblicherweise werden von einem DBMS gelöschte IDs nicht wiederverwertet und per AUTO_INCREMENT einfach immer weiter hochgezählt, aber da ist noch lange keine Garant, dass ein Datensatz mit höhrere ID auch tatsächlich später eingefügt wurde.
Das kann besonders bei Zeitumstellungen oder beim Umdatieren von Datensätzen der Fall sein.
Hi,
@suit
Wie eine ID vergeben wird, liegt im ermessen des Systems - üblicherweise werden von einem DBMS gelöschte IDs nicht wiederverwertet und per AUTO_INCREMENT einfach immer weiter hochgezählt, aber da ist noch lange keine Garant, dass ein Datensatz mit höhrere ID auch tatsächlich später eingefügt wurde.
Das wusste ich schon und es ging ja auch nicht darum welcher Datensatz als letzter hinzugefügt wurde sondern welcher der letzte in der Tabelle ist.
Also ist die Lösung die du per LIMIT vorgeschlagen und Andi noch mal hingeschrieben hat genau das was ich suchte.
mfg Xynon
Das wusste ich schon und es ging ja auch nicht darum welcher Datensatz als letzter hinzugefügt wurde sondern welcher der letzte in der Tabelle ist.
Nochmal fürs Protokoll (aka Archiv): der Datensatz mit der höchsten ID muss nicht jener sein, der als letzter ausgegeben wird, wenn alle Datensätze ohne Kriterien abgefragt werden.
In MySQL ist es möglich, eine Tabelle einmalig, permanent nach irgned einem Kriterium zu sortieren - z.B. eine Stammdatentabelle nach Vorname. Wenn das gemacht wurde, ist die ID selbst "durcheinander" und der letzte Datensatz in dieser Reihung mit hoher Wahrscheinlichkeit nicht mehr jener mit der höchsten ID.
Hi,
Nochmal fürs Protokoll (aka Archiv): der Datensatz mit der höchsten ID muss nicht jener sein, der als letzter ausgegeben wird, wenn alle Datensätze ohne Kriterien abgefragt werden.
Ja, ich weiß, aber dies ist dem php-script nicht wichtig, um das noch mal klar zustellen,
ich habe Schaltflächen die nur die ID wechseln und danach den Datensatz ausspucken wenn die ID nicht vorhanden ist dann wird diese übersprungen, das Ziel war z.B Tabelle 200 Datensätze und man springt vom 198 auf 199 der aber nicht mehr exisiert so soll er den überspringen.
Bis dahin kein Problem, aber existiert Datensatz 200 nicht mehr so würde er prüfen ob die Datensätze 201,202,203,usw. existieren, und das soll unterbunden sein so das wenn man einen Datensatz nach "rechts" bzw. "unten" geht
dann der letzte Datensatz angezeigt wird.
Ich hoffe das erklärt das ein bisschen besser.
mfg Xynon
Ich denke, ich würde es mit
Select *
FROM table
ORDER BY id DESC
limit 1
versuchen.
Also der letzte Datensatz, so sagt es mir meine Logik.