Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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 :)

Geschrieben

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

Geschrieben
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

Geschrieben

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 :)

Geschrieben

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.

Geschrieben
Original geschrieben von -silencer-

sagt eigentlich der name schon:

auto <- automatisch

increment <- erhoehen

:D

Das habe ich auch verstanden :D

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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...