[PHP5/MySQL] - Eine sehr knifflige Frage...
-
Hallo Zusammen!
Ich habe eine grössere Frage und glaube nicht dass es funktioniert. Aber vielleicht weiss jemand von Euch ob es eine Möglichkeit gibt?
Ich habe eine Tabelle mit Kunden gespeichert. Über ein Administrationsmenü kann man alte Kunden löschen. Wir nehmen an, die Tabelle enthält drei Kunden:
ID Kundenr Name Vorname
1 000001 Kunde Eins
2 022299 Test Zwei
3 000012 Hans MusterOkay, nehmen wir jetzt mal an bei der Löschung wird der Kunde "Test Zwei" ausgewälht. Über die Frage der Kundennummer wird der Eintrag dann komplett gelöscht: SELECT * FROM clients WHERE kunden='022299' <-- ich weiss, * sollte man nicht verwenden, doch nur jetzt im Beispiel.
Ist der Kunde gelöscht habe ich danach folgende Anzeige auf dem Bildschirm und auch in der SQL-Datenbank:
ID Kundenr Name Vorname
1 000001 Kunde Eins
3 000012 Hans MusterIhr vermutet bestimmt was ich jetzt möchte. ID ist ein PRIMARY KEY mit AUTO_INCREMENT. Wie kann ich es erreichen diesen zurückzusetzen ohne die noch bestehende Kunden zu löschen?
Jetzt wo Kunde mit ID 2 gelöscht worden ist, sollte nun Kudne Eins bestehen bleiben, jedoch Hans muster NEU die ID 2 haben...
wisst ihr was ich meine? Ich hoffe es mal..
Falls es irgendeine Möglichkeit gibt, dann bitte scnellstmöglich posten
Danke
Freundliche Grüsse
Wolfi
-
vergiss es... selbst wenn über Umwege sowas zu erreichen wäre, entspricht es nicht dem Sinn hinter einer ID... eine ID soll IMMER eindeutig sein, auch dann, wenn ein Eintrag gelöscht wird... Das verhindert, dass Einträge aus anderen Tabellen, die eventuell die alte ID referenziert hatten, plötzlich einen neuen "Benutzer" bekommen...
nimm als Beispiel mal ein Forum...
In der Beitragstabelle steht die ID des Benutzers, der ihn geschrieben hat. Wird der User gebannt (=gelöscht) zeigt die ID auf ein ungültiges Ziel und die Forensoftware kann entsprechend reagieren. Wird die ID aber neu vergeben, hat der neue Nutzer plötzlich Beiträge, die garnicht von ihm sind...lass es einfach... wenn dich die Lücken stören, bau ein Flag ein, mit dem du Nutzer als "gelöscht" markieren kannst, ohne sie tatsächlich löschen zu müssen...
Auf alle Fälle brauchst du keine Angst haben, dass der Adressraum mal ausgeht... du wirst nie mehrere Milliarden Nutzer haben (und selbst wenn: die Datenbank erzeugt dann keinen Überlauf, also fängt wieder bei Null an, sondern gibt einen Fehler aus und unterbricht das ganze)
btw: referenzier doch über die Kundennr... die ist doch auch eindeutig, oder nicht? (zumindest sollte sie)
-
Macht zwar keinen Sinn, wie zwutz schon sagte, aber prinzipiell könnte es für die eine Tabelle etwa so gehen
UPDATE t SET id = id -1 WHERE id > deletedId ORDER BY id DESC;
Aber wie gesagt, sobald man andere Tabellen hat, die diese id referenzieren, hat man ein Problem.
-
wieso nicht einfach beim auslesen in php dann eine laufvariable mit ner zählung ranhängen?
die id sollte für interne zwecke sein (fürs verbinden über mehrere tabellen, wie schon gesagt) und nicht eine zählung.