mysql: letzter Datensatz

T

ThaHammer

Aktives Mitglied
Thread Starter
Dabei seit
01.06.2004
Beiträge
3.303
Reaktionspunkte
13
Wie kriege ich den letzten Datensatz aus einer Tabelle? Ich komme nicht drauf.
Problem ist, ich trage da was ein, muss die neue ID dann aber noch in einer zweiten Tabelle eintragen, wegen der Verknüpfung!
Mit dem letzten Datensatz aus der ersten Tabelle, hätte ich auch die neue id!
Die ich dann wieder rum übergeben könnte. :confused:
 
OK, kurze Denkpausen sind echt hilfreich!

SELECT VersuchID FROM tversuche WHERE UserID = 2 ORDER BY Datum DESC, aZeit DESC LIMIT 1

Sortieren absteigend und dann limitieren auf einen Datensatz bringt das Ergebnis. Das Beispiel hier habe ich im Selfhtml Forum gefunden.
 
aber nur wenn in der zwischenzeit kein anderer einen neuen "letzten" datensatz gespeichert hat. da gab's doch was, um beide sql-befehle abzusetzen und den auto-wert im zweiten auch zu verwenden... hmmm, ich guck mal schnell nach.
 
Mit der SQL Methode
Code:
LAST_INSERT_ID(expr)
bekommst Du die letzte ID eines autoincrement Feldes zurück. Zur Sicherheit kannst Du beide Statements noch in ein BEGIN / COMMIT Pärchen packen.
 
  • Gefällt mir
Reaktionen: ThaHammer
Ihr bringt mich gerade auf ne Idee! Habs zwar jetzt laufen, aber was passiert wenn ein anderer User nach mir was einträgt?

Shit. Jetzt muss ich nochmal drüber nachdenken!
 
cmittendorf hat doch genau den fall beschrieben. packs in eine transaktion, dann kann da nix passieren, da die tabellen solange gesperrt sind.
 
  • Gefällt mir
Reaktionen: ThaHammer
cmittendorf hat doch genau den fall beschrieben. packs in eine transaktion, dann kann da nix passieren, da die tabellen solange gesperrt sind.

So gut sind meine mysql Kenntnisse ja auch nicht! Das die Tabelle dann gesperrt ist wusste ich z.B nicht. Das würde gehen! :)

Mit LAST_INSERT_ID(expr) hatte ich es schon probiert aber entweder gar nichts oder die komplette Tabelle zurück bekommen. Wie schaut expr den aus?
 
um Nebenläufigkeiten vermeiden sind Transaktionen unabdingbar!

Ansonsten sollte es doch ein

select max(id) from tabelle

tun oder?
 
OK, wenn ich

Code:
$sql = "SELECT LAST_INSERT_ID();";

mache, und danach echo $result. Kriege ich immer:

Resource id #10

eine id 10 habe ich aber in dieser Tabelle momentan nicht.
Ganz werde ich noch nicht schlau draus!
 
Zitat aus dem PHP-Handbuch:
PHP:
mysql_query("INSERT INTO mytable (product) values ('kossu')");
printf("Der zuletzt eingefügte Datensatz hat die ID %d\n", mysql_insert_id());
Reicht das?
 
  • Gefällt mir
Reaktionen: ThaHammer
Zitat aus dem PHP-Handbuch:
PHP:
mysql_query("INSERT INTO mytable (product) values ('kossu')");
printf("Der zuletzt eingefügte Datensatz hat die ID %d\n", mysql_insert_id());
Reicht das?

Schau ma mal? :)

OK.

Code:
$myid = mysql_insert_id();

spukt die richtige ID aus. Genial! :D
 
Wie Zuverlässing die die Funktion "mysql_insert_id()" eigentlich
Gehen wir mal von einem Multiprozessor-Server aus, auf dem Scripte parallel abgehandelt werden, und bei dem 100 "inserts" in der Sekunde laufen...

Ist da garantiert, dass ich auch wirklich die letzte ID, welche MEIN Script erzeugt hat zurückbekommen, oder bekomme ich die grundsätzlich letzte ID?
wenn also zwei parallel laufende Scripte "Gleichzeitig" in die Datenbank schreiben. (Ihr wisst, was ich meine :D)
:augen:

mfg
Lukas
 
Ist da garantiert, dass ich auch wirklich die letzte ID, welche MEIN Script erzeugt hat zurückbekommen, oder bekomme ich die grundsätzlich letzte ID?
wenn also zwei parallel laufende Scripte "Gleichzeitig" in die Datenbank schreiben. (Ihr wisst, was ich meine :D)
Die Frage habe ich mir auch schon gestellt, aber Gleichzeitigkeit gibt es ja eigentlich nicht wegen des Table-Locks, und wenn man die Funktionsbeschreibung dementsprechend interpretiert
The mysqli_insert_id() function returns the ID generated by a query on a table with a column having the AUTO_INCREMENT attribute. If the last query wasn't an INSERT or UPDATE statement or if the modified table does not have a column with the AUTO_INCREMENT attribute, this function will return zero.
kann ja nur die ID zurückkommen, die du mit DEINER Query eingefügt oder upgedatet hast. So wie ich es verstehe ist mysql_insert_id() bzw. mysqli_insert_id() also Teil DEINER Query, und die Tabelle ist für andere erst danach beschreibbar. Ein anderer Gedanke war, dass dieses Problem eine Alpha-Version von MySQL wahrscheinlich nicht überlebt hätte.
 
Zuletzt bearbeitet:
Zurück
Oben Unten