Tool-Time Geschrieben 22. April 2002 Geschrieben 22. April 2002 Ich habe folgendes Problem : Wenn ich etwas in eine Mysql -Datenbank schreiben, musst diese einen eindeutige id bekommen ? Sprich Tabellen Aufbau: id => char oder int (40) name => char(40) Ich habe mir einen "Funktion gebaut damit die id immer um 1 erhöht wird. $db_id = mysql_connect($mysqlhost, $mysqluser, $mysqlpassword); $sqldb_id = "select id from test "; $res_id = mysql_db_query("$mysqldb", $sqldb_id); $num_add = mysql_num_rows($res_id); $id_add =$num_add+1; mysql_close($db_id); Nur dadurch habe ich das Problem wenn ich einen Wert lösche, dann passt es nicht mehr. Z.B. ich habe 5 Einträge dann macht wird ID-6 vorgeschlagen. Löschen ich nun aber ID-3 dann wird ID-5 vorgeschlagen. Da es diese schon gibt, tritt ein Fehler auf . Zum lösen des Problem habe ich mir folgendes gedacht: Alle Werte werden in einen Array geladen und nach dem löschen werden die ID-Nr. neue vergeben. Wenn ich doch nun aber nur nach den Namen gehe (siehe oben Datenbank) Dann umgehe ich doch das Problem . Sprich mein "ID-" wird dann der Name Vielleicht habe ich die Logik der ID-Vergabe nicht ganz verstanden. Was meint ihr dazu ? MfG Tool-Time Zitieren
thomee Geschrieben 22. April 2002 Geschrieben 22. April 2002 Hallo, versuchs mal mit "select max(id) from test" damit bekommst du die größte (letzte) id. Lücke auffüllen würde ich nicht, weil dadurch Datensätze in evtl. verknüpften Tabellen nicht mehr stimmig sind. (id -> Fremdschlüssel) Dieser Thread könnte interessant sein: id erhöhen cu, Thomas Zitieren
shad0w Geschrieben 22. April 2002 Geschrieben 22. April 2002 fuer was gibt es auto_increment bei mysql?? :confused: Zitieren
Jaraz Geschrieben 22. April 2002 Geschrieben 22. April 2002 Original geschrieben von thomee Hallo, versuchs mal mit "select max(id) from test" Da Mysql keine Subselects unterstützt, musst du 2 Statements hintereinander verarbeiten. Dadurch kann es vorkommen, das User A sich die ID holt und bevor er den Datensatz speichert User B sich ebenfalls die gleiche ID holt. Wenn du nur Mysql nutzt, würde ich Autoincrement empfehlen. Oracle kannst du dann aber z.B. nicht nutzen bzw du musst dein Skript anpassen. Gruß Jaraz Zitieren
shad0w Geschrieben 22. April 2002 Geschrieben 22. April 2002 jo, fuer oracle kannst nen trigger schreiben, das ist auf jeden fall besser als ein script in php... und mysql kann auto_increment... Zitieren
Tool-Time Geschrieben 22. April 2002 Autor Geschrieben 22. April 2002 4.2. Wie kann ich die AUTO_INCREMENT-Nummer des nächsten Datensatzes ermitteln? Da MySQL ein mehrbenutzerfähiges Datenbanksystem ist, kann nicht mit Sicherheit gesagt werden, welche Nummer in einem mit AUTO_INCREMENT versehenen Feld ein einzufügender Datensatz erhalten wird. In der Zeit zwischen dem Bestimmen der bisher höchsten Nummer und dem Einfügen des neuen Datensatzes kann bereits an anderer Datensatz eingefügt worden sein, der die zuvor ermittelte Nummer zugeteilt bekommen hat. Um trotzdem vor dem Einfügen eines Datensatzes dessen ID bereits ermitteln zu können, lässt sich der folgende Trick verwenden. Die ID-Spalte der interessanten Tabelle wird nicht mit dem Attribut AUTO_INCREMENT versehen. Stattdessen wird eine zweite Tabelle angelegt, die nur die Aufgabe hat, per AUTO_INCREMENT eine Folge von Zahlen zu liefern. In diese zweite Tabelle wird nun vor dem Einfügen des eigentlichen Datensatzes in die erste Tabelle ein Dummy-Eintrag vorgenommen, der im ID-Feld dieser Tabelle die nächste verfügbare Zahl zugeteilt bekommt. Diese lässt sich nun per LAST_INSERT_ID() auslesen. Mit dieser auf diese Art gewonnen ID wird nun der eigentliche Datensatz in die erste Tabelle eingefügt. Das habe ich einmal zu Auto_increment gefunden :confused: aber das sagt mir nicht viel -sorry - Habt ihr mal ein Script Bespiel ? Ich denke mal das ich es mit der selcet max(id) versuchen werden . Bis denn Tool-Time und danke für eure Antworten Zitieren
thomee Geschrieben 22. April 2002 Geschrieben 22. April 2002 ja, autoincrement ist in dieser Beziehung natürlich sicherer. Wobei es natürlich für komplexere Vorgänge nötig ist, Tabellen zu sperren. Zitieren
Tool-Time Geschrieben 22. April 2002 Autor Geschrieben 22. April 2002 So nun habe ich es mit der Datenbank getestet - das is echt genial, dann kann ich ja meinen Wert wegwerfen. Danke :C ) Tool-Time Zitieren
Tool-Time Geschrieben 22. April 2002 Autor Geschrieben 22. April 2002 Ups, nur das damit auch der selber fehler auftritt, denn er nimmt hier auch immer die gesamt Zahl + 1 sprich wie meine Function . Was nun ? Is doch nicht so genial wie ich erst dachte. Schade Tja dann werde ich halt +2 beim meinem Script nehmen fertig. Zitieren
shad0w Geschrieben 22. April 2002 Geschrieben 22. April 2002 sagt eigentlich der name schon: auto <- automatisch increment <- erhoehen Zitieren
Tool-Time Geschrieben 22. April 2002 Autor Geschrieben 22. April 2002 Original geschrieben von -silencer- sagt eigentlich der name schon: auto <- automatisch increment <- erhoehen Das habe ich auch verstanden nur, habe ich es mir so vorgestellt : ID: 1 ID: 2 ID: 3 ID 2 wird gelöscht Neu ID : ID:1 ID:3 Nächste ID: ID 4 , nur nimmt er dann auch ID-3 tja shit happens - mache es nun mit +2 - bis ich etwas besseres weiß . Bis denn Tool-Time Zitieren
shad0w Geschrieben 22. April 2002 Geschrieben 22. April 2002 hm, neee... auto_increment nimmt dann id 4, nicht 3... Zitieren
Tool-Time Geschrieben 22. April 2002 Autor Geschrieben 22. April 2002 Ah, jetzt ja, ich habe die Tabelle geleert, und nun gehts juhu danke danke Tool-Time Zitieren
MiH Geschrieben 23. April 2002 Geschrieben 23. April 2002 um den letzten wert einer spalte zu erhalten kann man auch last_insert_id(SPALTE) nehmen Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.