Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
(Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI...

ID von neuem Datensatz

Diskussion: ID von neuem Datensatz im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige Hi, Es existiert eine MySQL-Tabelle mit Namen 'Tabelle', darin befinden sich mehrere Felder, eines davon ist der Primaerschluessel 'ID' ...

Antwort
Alt 12.10.08, 17:49   #1 (permalink)
 
Registriert seit: 06.01.07
keksinat0r Leistung: Facit NTK
Likes: 0
Standard ID von neuem Datensatz

Anzeige

Hi,

Es existiert eine MySQL-Tabelle mit Namen 'Tabelle', darin befinden sich mehrere Felder, eines davon ist der Primaerschluessel 'ID' mit auto_increment.

Wenn ich jetzt mittels

Code:
INSERT INTO `Tabelle` (...) VALUES (...);
einen neuen Datensatz anlege, vergibt MySQL ja selbststaendig eine ID.

Wie komme ich jetzt an eben diese ID, des _gerade_ erzeugten Datensatzes ran?


Code:
SELECT MAX(`ID`) FROM `Tabelle`;
funktioniert nicht immer, da zwischen diesen Beiden Befehlen eventuell bereits ein weiter Datensatz eingefuegt wurde...

- MfG Keks :)
keksinat0r ist offline   Mit Zitat antworten
Alt 12.10.08, 17:55   #2 (permalink)
Senior Member
 
Registriert seit: 27.06.04
Cyberm@ster Leistung: Facit NTK
Likes: 0
Standard

Da das mit MAX ('ID') ja nicht immer klappt könntest du noch eine Spalte timestamp einfügen. Dann machst du in php eine Variable $ts = time() fügst diese mit in die Zeile ein und liest sie nachher so aus: SELECT ID from 'Tabelle' WHERE timestamp = $ts
Cyberm@ster ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 12.10.08, 17:57   #3 (permalink)
 
Benutzerbild von metax.
 
Registriert seit: 22.01.07
metax. Leistung: 8086
metax. eine Nachricht über ICQ schicken
Likes: 10
Standard

Steht alles in der Doku ... http://dev.mysql.com/doc/refman/5.0/...increment.html
Hier wirst du in Bezug auf die letzte Auto-ID auf die API-Funktion mysql_insert_id() verwiesen.

Wenn man das im PHP Manual nachschlägt, findet man ebenfalls eine Funktion mit dem Namen mysql_insert_id(), welche der obigen MySQL-Funktion entspricht.
Da diese Funktion verbindungsorientiert ist, kann es nicht passieren, dass dir jemand in der Zwischenzeit den Wert überschreibt.

mfg, metax.
__________________
Wenn keiner zuschaut, teile ich heimlich durch Null!
Meine Homepage: Planet Metax | meine Bilder: DeviantArt | Twitter
metax. ist offline   Mit Zitat antworten
Alt 12.10.08, 18:00   #4 (permalink)
Member of Honour
 
Benutzerbild von easteregg
 
Registriert seit: 14.09.07
easteregg Leistung: Pentium Ieasteregg Leistung: Pentium I
easteregg eine Nachricht über ICQ schicken
Likes: 62
Standard

schonmal nach LAST_INSERT_ID gegooglet?
das hilft dir weiter, falls du mit php arbeitest.

mysql_insert_id()

edit: mist, da war einer schneller!
__________________
» Flattr mich! - Wenn dir mein Beitrag geholfen hat! «
<| 2 AMD Opterons 2384@ 8x3,2ghz | Tyan S2915 | 10GB | 2x 8800GT | 8400GS | Dell 3008WFP + 2x2007FP |>
easteregg ist offline   Mit Zitat antworten
Alt 12.10.08, 18:09   #5 (permalink)
Themenstarter
 
Registriert seit: 06.01.07
keksinat0r Leistung: Facit NTK
Likes: 0
Standard

Danke, das hat mir schonmal geholfen

Es handelt sich uebrigens um Perl, nicht um PHP, da ich aber auf der Suche nach einem passenden SQL-Befehl war, dachte ich nicht dass es relevant sei die Sprache zu nennen

- MfG Keks
keksinat0r ist offline   Mit Zitat antworten
Alt 12.10.08, 18:51   #6 (permalink)
Senior Member
 
Registriert seit: 27.06.04
Cyberm@ster Leistung: Facit NTK
Likes: 0
Standard

Gut zu wissen. Wenn ich das richtig verstanden habe gibt mysql_insert_id() die ID des letzten inserts zurück, unabhängig von dem was in zwischenzeit mit der db passiert ist?
Cyberm@ster ist offline   Mit Zitat antworten
Alt 12.10.08, 19:10   #7 (permalink)
Member of Honour
 
Benutzerbild von easteregg
 
Registriert seit: 14.09.07
easteregg Leistung: Pentium Ieasteregg Leistung: Pentium I
easteregg eine Nachricht über ICQ schicken
Likes: 62
Standard

da binsch mir nicht ganz sicher, aber ich hab beim rumsuchen über da sproblem mal was von begin / commit blöcken gelesen, damit geschiet die aktion auf einmal und du bekommst mit sicherheit die die zum dem eingefügen datensatz zurück
__________________
» Flattr mich! - Wenn dir mein Beitrag geholfen hat! «
<| 2 AMD Opterons 2384@ 8x3,2ghz | Tyan S2915 | 10GB | 2x 8800GT | 8400GS | Dell 3008WFP + 2x2007FP |>
easteregg ist offline   Mit Zitat antworten
Alt 13.10.08, 09:37   #8 (permalink)
 
Registriert seit: 22.10.07
AmShaegar Leistung: Facit NTK
Likes: 0
Standard

Zitat:
Ähm, warum machst du nicht einfach ein
Code:
SELECT id FROM tabelle ORDER BY id DESC LIMIT 1
Dank ORDER BY id DESC wird absteigend nach id sortiert und LIMIT 1 nimmt nur den ersten Datensatz. Dein Ergebnis ist nun also die letzte eingetragene id.
Edit: Ich les grad ich hab nicht aufgepasst. Wenn tatsächlich zwischen den beiden Befehlen ein weiterer Datensatz eingefügt wurde, dann ist mein Ansatz genauso schlecht wie MAX (id).
Allerdings klappt das mit dem Timestamp auch nicht, weil ja in der gleichen Sekunde ein anderer Datensatz entstanden sein kann. Wenn man nun aber einen verschlüsselten eindeutigen String nehmen würde, würds klappen. Natürlich darf man jetzt nicht den timestamp verschlüsseln, weils wieder den gleichen String geben könnte, aber man könnte zum Beispiel, wenn eine Userverwaltung vorhanden ist oder so, den Benutzer + timestamp verschlüsseln.
Code:
md5('AmShaegar1223849258');
Anschließend die ID dieses Datensatzes ermitteln:
Code:
SELECT id FROM tabelle WHERE key LIKE 'md5('AmShaegar1223849258')'
Es ist unwahrscheinlich, das jemand mit dem gleichen namen in der glecihen Sekunde etwas abschickt oder? ansonsten könnte man noch die ersten 10 Zeichen des Textes oder sonstwas, was möglcih variabel ist, mit in den md5 packen.
Ich hoffe das hilft eher

MfG AmShaegar
AmShaegar ist offline   Mit Zitat antworten
Alt 13.10.08, 11:11   #9 (permalink)
Member of Honour
 
Benutzerbild von easteregg
 
Registriert seit: 14.09.07
easteregg Leistung: Pentium Ieasteregg Leistung: Pentium I
easteregg eine Nachricht über ICQ schicken
Likes: 62
Standard

wieso wird die transaktionsgeschichte komplett ignoriert?

Code:
mysql_query("begin");
$res = mysql_query("insert_bla_bla_bla");
$id_res = mysql_query("SELECT LAST_INSERT_ID();")
mysql_query("commit");
liegt an euch, das in jegliche andere sprache umzusetzen.
__________________
» Flattr mich! - Wenn dir mein Beitrag geholfen hat! «
<| 2 AMD Opterons 2384@ 8x3,2ghz | Tyan S2915 | 10GB | 2x 8800GT | 8400GS | Dell 3008WFP + 2x2007FP |>
easteregg ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Web, Network & Multimedia Palace » (Web-) Design und webbasierte Sprachen » ID von neuem Datensatz
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
ID datensatz abrufen gugugs (Web-) Design und webbasierte Sprachen 3 17.01.08 21:23
HST-Datensatz parkouma Internet Allgemein 11 08.04.07 15:04
SQL abfrage zeigt nur einen Datensatz an obwohl es mehrere sein müssten ba2 (Web-) Design und webbasierte Sprachen 3 28.05.06 20:45
Mit neuem RAM funktioniert nichts ripperchris Hardware Probleme 6 17.08.05 20:07
Datensatz in Mysql Datanbank erstellen Flou (Web-) Design und webbasierte Sprachen 11 02.11.03 16:08


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61