IDs nach dem Löschen von Zeilen ändern

IDs nach dem Löschen von Zeilen ändern

am 10.10.2006 16:25:22 von Colin Finck

Hallo,

Ich habe zwei Tabellen mit IDs als Primärschlüssel in einer
SQLite-Datenbank.
Die eine Tabelle enthält die Daten, die andere Tabelle die Reihenfolge
in Zahlenwerten.
Hier mal ein Beispiel:

table_1
=======3D
id | Daten
-------------------
1 | Blabla
2 | Test
3 | Noch ein Test

table_2
=======3D
id | Reihenfolge
------------------
1 | 3
2 | 2
3 | 1

Nun lösche ich aus beiden Tabellen jeweils die Zeile mit der ID 2.
Danach sieht es allerdings folgendermaßen aus:

table_1
=======3D
id | Daten
-------------------
1 | Blabla
3 | Noch ein Test

table_2
=======3D
id | Reihenfolge
------------------
1 | 3
3 | 1

Jetzt hätte ich gerne, dass sowohl bei der ID- als auch bei der
Reihenfolge-Spalten die Zahlen fortlaufend sind. Die Tabelle "table_2"
soll also folgendermaßen aussehen:

id | Reihenfolge
------------------
1 | 2
2 | 1

Natürlich muss dadurch die ID in "table_1" ebenfalls geändert werden.

Ich will dadurch erreichen, dass man für Funktionen wie "Eintrag nach
oben bzw. unten verschieben" einfach den Wert in der Spalte
"Reihenfolge" um 1 vermindern bzw. erhöhen muss.

Wie mach ich das am besten?
Oder habt ihr andere Ideen, wie ich die Einträge nach oben bzw. nach
unten verschieben sollte?

Vielen Dank im Voraus,

Colin Finck

Re: IDs nach dem Löschen von Zeilen ändern

am 10.10.2006 16:33:40 von Carsten Wiedmann

Colin Finck schrieb:

> Ich habe zwei Tabellen mit IDs als Primärschlüssel in einer
> SQLite-Datenbank.
>
> Nun lösche ich aus beiden Tabellen jeweils die Zeile mit der ID 2.
> Danach sieht es allerdings folgendermaßen aus:
>
> Jetzt hätte ich gerne, dass sowohl bei der ID- als auch bei der
> Reihenfolge-Spalten die Zahlen fortlaufend sind. Die Tabelle "table_2"

Es ist nicht die Aufgabe der ID, bzw. des Primärschlüssels, fortlaufend zu
sein:
Er muss eindeutig sein.

Die Frage wäre jetzt also:
Warum ist es dir so wichtig, dass die ID keine "Lücken" hat?

BTW:
Falls es dir um eine Nummerierung der Reihen in der Ausgabe geht, dann macht
man das über einen Zähler in der Zielanwendung.

Gruß
Carsten

Re: IDs nach dem Löschen von Zeilen ändern

am 10.10.2006 16:49:13 von Niels Braczek

Colin Finck schrieb:

> Jetzt hätte ich gerne, dass sowohl bei der ID- als auch bei der

Warum sollte man das wollen? Das widerspricht dem Wesen einer ID.

> Reihenfolge-Spalten die Zahlen fortlaufend sind.=20

Auslesen und mit der neuen Position UPDATEn.

MfG
Niels

--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------

Re: IDs nach dem Löschen von Zeilen ändern

am 10.10.2006 17:04:33 von Claus Reibenstein

Colin Finck schrieb:

> Die eine Tabelle enthält die Daten, die andere Tabelle die Reihenfolge
> in Zahlenwerten.

Mir ist absolut nicht klar, warum Du hierfür eine zweite Tabelle
bemühst. Irgendwie ist das ein ziemlich krankes Design.

Gruß. Claus

Re: IDs nach dem Löschen von Zeilen ändern

am 10.10.2006 18:32:02 von do.not.REMOVETHAT

Colin Finck schrieb:

> Jetzt hätte ich gerne, dass sowohl bei der ID- als auch bei der
> Reihenfolge-Spalten die Zahlen fortlaufend sind. D

16.16. Meine IDs haben Lücken - wie vergebe ich sie neu?
http://www.php-faq.de/q/q-sql-ids.html

Grüße, Matthias

--
http://www.trullala.de
--
Der Trend geht ganz eindeutig zur Zweitsignatur.

Re: IDs nach dem Löschen von Zeilen ändern

am 11.10.2006 09:41:09 von Colin Finck

Claus Reibenstein schrieb:

> Mir ist absolut nicht klar, warum Du hierfür eine zweite Tabelle
> bemühst. Irgendwie ist das ein ziemlich krankes Design.

Ich hab das mit "table_1" und "table_2" jetzt nur mal so als Beispiel
genommen, um das mit der Reihenfolge zu verdeutlichen.
In echt gibt es drei Tabellen, die auch alle mehr Spalten haben.

Beste Grüße,

Colin Finck

Re: IDs nach dem Löschen von Zeilen ändern

am 11.10.2006 11:12:07 von Colin Finck

Erstmal danke für alle Antworten.

Eine fortlaufende Nummerierung der eindeutigen IDs ist nicht unbedingt
notwendig.
Ich fand das jetzt nur ein bisschen komisch, da es mit den Lücken auf
Dauer zu ziemlich hohen ID-Nummern kommen kann.

Ich habe jetzt auch eine Idee, wie ich das mit der Reihenfolge
implementieren kann.
Um einen Eintrag nach oben zu verschieben, muss man ja eigentlich nur
den Wert in der "Reihenfolge"-Spalte des oberen Elements mit dem des
Unteren vertauschen.

Wenn ich z.B. einen Eintrag mit Reihenfolge =3D 7 habe, verwende ich
folgende Abfrage, um die ID des Eintrags herauszufinden, der direkt
über dem Eintrag mit Reihenfolge =3D 7 liegt:

SELECT id FROM table_2 WHERE Reihenfolge < 7 ORDER BY Reihenfolge DESC
LIMIT 1

Würde man das so machen, oder habt ihr da noch bessere Ideen?

Beste Grüße,

Colin Finck