ERLEDIGT
NEIN
NEIN
ANTWORTEN
9
9
ZUGRIFFE
934
934
EMPFEHLEN
-
22.01.03 19:24 #1
Folgendes:
ich hab in meiner MySQL DB eine Tabelle in dem mehrere Felder sind. Es interessiert nur das erste: ID . Es erhöht pro Eintrag den Wert per Auto_Increment um 1! Wenn man allerdings z.B. die 6. Zeile aus der Tabelle löscht, dann sieht das so aus 4 , 5 , 7 , 8 , ...! Die 6 also fehlt. wenn ich aber jetzt ein Script habe, bei dem die IDs immer fortlaufend sein müssen, dann hab ich n Problem! Ich wollte eigentlich wissen, welche einstellungen man an der DB vornehmen muss, damit er, wenn ich z.B. die 6 lösche, er alle IDs eins runter setzt, damit kein "Loch" entsteht... HHIILLFFEE
Danke schomma für die Hilfe
mfg
Freddy
-
ist nicht einstellbar da muss man per "hand" nacharbeiten
$loesche = 6;
$erg = mysql_query("delete from tab where id='$loesche'");
$erg = mysql_query("update tab set id=id-1 where id > '$loesche'");
-
22.01.03 20:51 #3
ok logisch
danke!
-
das wird aber doch extrem problematisch, wenn mehrere User die DB benutzen... wenn jetzt z.B. user 1 seine Nachrichten anzeigen lässt, welche er ja für alle Operationen (delete, move, ...) per Id-Link-ansprechen kann, und dann während er sich die seite anschaut user 2 eine seiner Nachrichten löscht... (und somit den genannten Befehl an die DB schickt) dann hat user 1 die falschen Id-Links... .
Versteht ihr, was ich mein? Es wäre doch bei dieser Problematik sinnvoller, ein Programm/ eine methode zu schreiben, die aufräumt, während wenige/keine User on sind... . Oder ist etwas anderes besser? Ich seh imMo nix
.... .
-
21.04.03 15:52 #5
Also deine idee ist sicher Sinnvoll, allerdings nicht wirklich für das Script, was ich geschrieben hab.
danke trotzdem
-
Ich habs mal ausprobiert und es hat soweit so gut geklappt. Doch wenn ich nun einen weiteren Eintrag in die DB mache, wird der automatisch, vom ursprünglichen Wert aus, weitergezählt.
Das war jetzt kompliziert. Hier ein Beispiel:
Ich habe 4 Einträge
1....
2....
3....
4....
5....
jetzt lösche ich die 4 und 5.
--> sind also noch die Einträge 1-3.
Wenn das Script jetzt aber einen Eintrag (per auto_increment) dazufügt, passiert folgendes:
1....
2....
3....
6.... --> die 4 und 5, die Gelöscht wurden, werden weiter übersprungen******
Wie kann ich das beheben****?
Danke für eure Antworten!
-
Ich würd sagen ihr packt das Problem von der falschen Seite her an... passt euer Script an die Datenbank an, nicht andersherum... mir fällt jetzt kein Beispiel ein, bei dem es mit "Lücken" bei den IDs Probleme geben sollte.
„Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
“For every complex problem, there is an answer that is short, simple and wrong.”
“Pessimism is safe, but optimism is a lot faster!”
Aktuelles Coding Quiz: #17 - Wörter kreuz und quer
-
Es geht mir eigentlich nicht um das Script. In erster Linie möchte ich die DB in möglichst "sauberen" zustand halten. Bei 500 Einträgen am Tag wovon 300 wieder gelöscht werden, jagt das die ID schon ziemlich in die höhe.
Ich weiss nicht vielleicht ist das ja auch egal? Ich denke mir nur, dass man auf diese Weise die DB auch ein bisschen schlanker und damit die Perform. ein bisschen höher halten könnte.
Oder liege ich da falsch? Ich weiss es wirklich nicht.
Obwohl ich schon einige Zeit MySQL in verbindung mit PHP nutze muss ich immer wieder sagen, dass ich eben doch noch ein blutiger Anfänger bin.
Da bin ich froh euch hier zu haben****** Big thanx******
------------
--- edit ---
Eine Möglichkeit wüsste ich nun doch. Ist jedoch zu aufwendig.
Zuerst die ganzen ID's "manuell" ordnen, wie oben schon erwähnt.
Dann könnte man die ganze DB mitten in der Nacht (oder so) zwischenspeichern, dann die Tabelle "droppen" und anschliessend Create mit den zwischengespeicherten Werten. Dass würde die 'auto_increment' Funktion auch reseten und in den gewünschten ID weitermachen...
Ich denke aber, dass diese Art, bei grösseren DB's, ziemlich an der Performance zerrt - oder?Geändert von cobraone (17.06.03 um 10:34 Uhr)
-
17.06.03 10:59 #9
Hallo,
Mit einer UNSIGNED BIGINT Spalte kann man ca. 1,8e+18 Zahlenwerte speichern. Bei 500 neuen Datensätzen pro Tag entspricht dies ca. der Menge von 3,6e+15 Tagen oder 100 Billionen Jahren!
Ich denke das reicht aus, um das Feld nicht zum überlaufen zu bringen.
Sind mit der ID Spalte noch Spalten in anderen Tabellen verknüpft? Dann müsste man beim manuellen Änderen der ID-Werte auch die entsprechenden Werte in den anderen Tabellen ändern!
Mein Vorschlag:
Die ID Spalte als auto_increment lassen wie sie ist, eventuell den Datentyp ändern, damit mehr Werte gespeichert werden können. Zusätzlich dazu eine zweite Spalte anlegen (z.B. SORT), in der du die Werte manuell in richtiger Reihenfolge einträgst. Beim Einfügen eines neuen Datensatz muss vorher der nächste Wert ermittelt werden (MAX(SORT)+1). Beim Löschen eines Datensatzes entsprechend alle folgenden Werte um 1 verkleinert werden.
Die ID Spalte als PRIMARY KEY anlegen. Dann kannst du die Werte in der SORT Spalte ändern, ohne dass irgendwelche Verknüpfungen davon betroffen sind. Da der Primärschlüssel in einem Index verwaltet wird, spielt die Performance keine Rolle.
Grüße Thomas
-
17.06.03 18:33 #10
schreibe die id's einfach nicht püer auto_increment in die datenbank sondern rufe vorher ab, wie viele Zeilen du in der Datenbank hast ( mysql_num_rows(); ). dann haste automatisch den wert der höchsten id. diesen wert setze einfach +1 also $neu = $ausgabe[id] + 1 und inserst den in ne neue Zeile. wenn du jetzt einen datensatz löschst, musst du mit dem script nur noch alle IDs, die größer sind als die id, die du gelöscht hast, eines runter setzen. also:
also di ids mit dem script generieren! und dann eben kein auto increment verwenden!PHP-Code:UPDATE $tabelle SET * -1 WHERE id > $ausgabe[id]
Ähnliche Themen
-
Sidebar an Maincontent anpassen (fortlaufend)
Von dobber812 im Forum CSSAntworten: 13Letzter Beitrag: 20.10.08, 22:26 -
Dateinamen rekursiv fortlaufend nummerieren
Von dochamburg im Forum PHPAntworten: 4Letzter Beitrag: 03.12.07, 17:11 -
shell Befehl gibt fortlaufend zeilenweise Output aus - wie auslesen?
Von Paula im Forum PHPAntworten: 4Letzter Beitrag: 16.08.07, 12:37 -
Fortlaufend nummerierte Labels ansprechen
Von NeMeSiS1987 im Forum Visual Basic 6.0Antworten: 5Letzter Beitrag: 19.04.07, 11:14 -
Webserver LogFiles automatisch packen und fortlaufend benennen
Von madmax2600 im Forum Hosting & WebserverAntworten: 2Letzter Beitrag: 21.07.03, 15:11





Zitieren

Login





