PHP und MAX id bzw. LAST INSERT ID

Mitglied: Protected

Protected (Level 1) - Jetzt verbinden

21.02.2016, aktualisiert 22.02.2016, 1035 Aufrufe, 8 Kommentare

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?
Mitglied: LordGurke
21.02.2016 um 23:17 Uhr
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?
Bitte warten ..
Mitglied: Protected
21.02.2016, aktualisiert um 23:24 Uhr
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
Bitte warten ..
Mitglied: LordGurke
21.02.2016 um 23:25 Uhr
Ein einfaches
ORDER BY `id` DESC LIMIT 1;
wäre da wahrscheinlich einfacher ;-) face-wink
Bitte warten ..
Mitglied: Protected
21.02.2016 um 23:32 Uhr
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?
Bitte warten ..
Mitglied: LordGurke
LÖSUNG 21.02.2016, aktualisiert 22.02.2016
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
Bitte warten ..
Mitglied: StefanKittel
LÖSUNG 22.02.2016, aktualisiert um 13:40 Uhr
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
Bitte warten ..
Mitglied: Protected
22.02.2016 um 13:40 Uhr
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!
Bitte warten ..
Mitglied: StefanKittel
22.02.2016 um 13:50 Uhr
Hallo,

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

Stefan
Bitte warten ..
Heiß diskutierte Inhalte
Off Topic
Ein Weg weg von Microsoft. Wie würde man es angehen? Lasst uns doch etwas spinnen
it-fraggleVor 1 TagAllgemeinOff Topic50 Kommentare

Guten Morgen Kollegen, es treibt mich schon seit einigen Jahren um, dass es sinnvoll wäre langsam einen Weg weg von Microsoftprodukten zu finden. Mir ...

Server-Hardware
HPE ProLiant MicroServer Gen10 Plus - Wo wird das OS installiert?
mayho33Vor 1 TagFrageServer-Hardware13 Kommentare

Hallo @ All, Ich liebäugle mit einem neuem Server (siehe Überschrift). Mein alter Gen8 ist zwar immer noch am laufen, aber es gibt einiges ...

Hardware
Versorgungsengpass Chips
NebellichtVor 1 TagAllgemeinHardware13 Kommentare

Allg. frage ich mich ja warum Apple auf ARM frühzeitig gesetzt hat. Die Automobilindustrie gerade Absatzprobleme hat, weil keine Chips mehr geliefert werden können. ...

Windows Server
Server 2019 RDS-CALs für Domänen-Admins? Ernsthaft?
gelöst anteNopeVor 1 TagFrageWindows Server7 Kommentare

Nabend zusammen, ich habe hier heute einen RDS auf Basis eines Server 2019 STD installiert und mit User-CALs lizenziert. Soweit funktioniert auch alles. Nur ...

LAN, WAN, Wireless
100m GBit-Richtfunk im Freien - Produktempfehlungen?
mstrd308Vor 1 TagFrageLAN, WAN, Wireless9 Kommentare

Hallo zusammen, ich bin auf der Suche nach Produktempfehlungen um einen Richtfunk von einem Gebäude zu einen weiteren zu realisieren. Die Peripherie soll draußen ...

Exchange Server
Transparente Mail-Archivierung Exch. 2016 m. direktem Outlook-Zugriff
departure69Vor 1 TagFrageExchange Server17 Kommentare

Hallo. - Windows 2016 AD-Domäne, 2 DCs unter W2K16 Std. (1 x physisch, 1 x virtuell unter Hyper-V), Funktionsebene 2016 - Exchange 2016 unter ...

Festplatten, SSD, Raid
Wie würdet ihr eine Datenrettung machen?
pd.edvVor 15 StundenFrageFestplatten, SSD, Raid8 Kommentare

Hallo, ich arbeite gerade an einem Blog-Artikel zum Thema Datenrettung und würde mich brennend interessieren wie Ihr eine Datenrettung angehen würdet. Sagen wir mal ...

Multimedia
PDF Dokumente KOSTENLOS ausfüllen, wie?
Mrhallo19981Vor 1 TagFrageMultimedia12 Kommentare

Hallo, ich möchte PDF Dokumente kostenlos ausfüllen. Anschließend sollen diese Signiert werden. Signieren tu ich mit einem Zertifikat von Adobe. Deswegen ist es wichtig, ...