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-ID: 296960

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

Ausgedruckt am: 26.11.2024 um 03:11 Uhr

LordGurke
LordGurke 21.02.2016 um 23:17:51 Uhr
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?
Protected
Protected 21.02.2016 aktualisiert um 23:24:44 Uhr
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
LordGurke
LordGurke 21.02.2016 um 23:25:33 Uhr
Goto Top
Ein einfaches
ORDER BY `id` DESC LIMIT 1;
wäre da wahrscheinlich einfacher face-wink
Protected
Protected 21.02.2016 um 23:32:05 Uhr
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?
LordGurke
Lösung LordGurke 21.02.2016, aktualisiert am 22.02.2016 um 13:40:57 Uhr
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
StefanKittel
Lösung StefanKittel 22.02.2016 aktualisiert um 13:40:52 Uhr
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
Protected
Protected 22.02.2016 um 13:40:49 Uhr
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!
StefanKittel
StefanKittel 22.02.2016 um 13:50:13 Uhr
Goto Top
Hallo,

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

Stefan