protected
Goto Top

PHP und MAX id bzw. LAST INSERT ID

Hallo,

ich benötige die Letzte ID von der Tabelle xy. Leider kann ich LAST_INSERT_ID nicht verwenden, weil kein INSERT Befehl vorher stattfindet.
ID ist auto_increment.
Mit MAX(id) habe ich ebenfalls ein Problem, denn wenn ich einen Datensatz lösche z.B. Datensatz 4 dann sollte er eigentlich bei MAX(id) die 3 ausgeben + plus 1 = 4. Leider ist der auto_increment auf 5 gesetzt...

Nun meine Frage: gibt es eine Möglichkeit den auto_increment wert auszugeben?

Content-Key: 296960

Url: https://administrator.de/contentid/296960

Printed on: April 16, 2024 at 04:04 o'clock

Member: LordGurke
LordGurke Feb 21, 2016 at 22:17:51 (UTC)
Goto Top
Du kannst dir mit
SHOW TABLE STATUS LIKE `Name_Der_Tabelle`
die Eigenschaften der Tabelle ausgeben, wo unter anderem auch der auto_increment angegeben ist.
Aber vorsicht: Das ist natürlich nicht transaktionssicher - wofür brauchst du den Wert aus auto_increment denn, vielleicht gibt es da bessere Möglichkeiten?
Member: Protected
Protected Feb 21, 2016 updated at 22:24:44 (UTC)
Goto Top
Ich lasse via Ajax etwas eintragen in die Datenbank. Stell dir das so vor:

-> Lese letzte id aus
->Rufe per XMLHttpRequest einen Link auf, wo etwas in die Bestellposition geschrieben wird. Hierbei muss die letzte ID übergeben werden von der Tabelle bestellungen, da jedes mal wenn eine position hinzugefügt wird ein eintrag in die Datenbak gemacht wird
Member: LordGurke
LordGurke Feb 21, 2016 at 22:25:33 (UTC)
Goto Top
Ein einfaches
ORDER BY `id` DESC LIMIT 1;
wäre da wahrscheinlich einfacher face-wink
Member: Protected
Protected Feb 21, 2016 at 22:32:05 (UTC)
Goto Top
Das funktioniert ja eben nicht. Wenn ich mähmlich mitten drin eine ID lösche, ist auto_increment höher und er trägt den auto_increment wert ein.. eventuell auto_increment weg lassen?
Member: LordGurke
Solution LordGurke Feb 21, 2016, updated at Feb 22, 2016 at 12:40:57 (UTC)
Goto Top
Das habe ich vorhin offenbar falsch verstanden...
Dafür wäre es vermutlich am einfachsten, wenn du dir z.B. per PHP uniqid() eine Unique-ID erzeugen lässt, diese als zusätzliches Feld mit in die Tabelle schreibst und die generierte Unique-ID an dein Javascript gibst. Dann kannst du statt über die ID über die UniqueID per XMLHttp anfragen.

Auto_Increment will man normalerweise haben - es sei denn du kannst andere eindeutige Primärschlüssel erzeugen, aber Auto-Increment ist da am einfachsten face-wink
Member: StefanKittel
Solution StefanKittel Feb 22, 2016 updated at 12:40:52 (UTC)
Goto Top
Hallo,

dann ist Dein Ablauf schlicht falsch.
Selbst wenn Du diese ID sicher auslesen kannst, könnte ein 2. und 3. Request vor Deinem Insert, aber nach Deiner ID ermittlung, ausgeführt werden.

Also bleiben Dir nur 2. Wege.
1. Erst den Insert, ID merken und weiterverwenden
2. Die LG geschrieben hat eine unique ID erstellen und diese als "zwei-Schlüssel" verwenden.

Eigentlich sollte es ja so sein.
Du erstellt die Bestelltung, bekommst die ID und schreibst diese in in die Session.
Danach kommt zur Bestellung die einzelnen Positionen welche diese ID verwenden.

Stefan
Member: Protected
Protected Feb 22, 2016 at 12:40:49 (UTC)
Goto Top
Eigentlich sollte es ja so sein.
Du erstellt die Bestelltung, bekommst die ID und schreibst diese in in die Session.
Danach kommt zur Bestellung die einzelnen Positionen welche diese ID verwenden.


Ja. Sorry, darauf bin ich in dem Moment nicht gekommen. Aber Unique ID ist auch nicht schlecht. Danke!
Member: StefanKittel
StefanKittel Feb 22, 2016 at 12:50:13 (UTC)
Goto Top
Hallo,

ja, aber Unique ID ist vermutlich langsammer da "nicht native".
Index bei Unique ID nicht vergessen.

Stefan