DB neu durchnumerieren

Mr_Scotch

Grünschnabel
Hallo,
ich habe eine DB auf meiner Webseite in der ich Einträge per Schaltfläche hoch oder runter schieben (sortieren) kann.
Für die Sortierung habe ich in der DB ein Feld "sortorder" vom Type Int.
Wenn ich jetzt einen Eintrag lösche, entsteht in der sortorder ein Lücke.
z.b.
vorher
1
2
3
nach dem löschen
1
3

wie kann ich die Lücke vermeiden bzw. das Feld sordorder aktualisieren das keine Lücke
entsteht.
Ich hoffe ich habe mich nicht zu kompliziert ausgedrückt.
Ich habe schon an eine Hilfstabelle gedacht aber das kommt mir sehr aufwendig vor.
Gruß Ingo
 
Die Frage ist, ob es überhaupt notwendig ist, die Nummerierung in der DB abzuspeichern. Speicher die DB-Query in einem weiteren Array, schon hast Du eine "Nummerierung ($array[0]['name']), die auch nachrückt. In der DB jedenfalls sehe ich eigentlich keinen Sinn, so eine banale Nummernreihenfolge zu speichern, geschweige denn nachzubessern.

mfg chmee
 
@chmee
Ich denke das TO hier weniger einen KEY oder INDEX meint als das er eine Reihenfolge haben will unabhängig von der Reihenfolge wie die Datensätze in der DB stehen oder manipuliert werden.

@TO
Ich denke das du das innerhalb der DB nicht machen können wirst ... es für sowas also nur sehr schwer wird ein entsprechendes Query zusammenzubasteln ... falls es überhaupt geht.
Du wirst schon nach dem DELETE ein weiters SELECT machen und dann in welcher Sprache auch immer dort mit einer for()-Schleife deine SortOrder korrigieren müssen. Das es eine Datenbank gibt die das innerhalb des DELETE-Query machen kann bezweifel ich da die DB ja erst nach dem vollständigen DELETE weis wie viele Datensätze freigeworden sind musst du so oder so ein zweites Query absetzen ... und um das ganze relativ einfach zu halten und nicht mit überlangen Queries Probleme zu bekommen kannst du es dann auch gleich in deinem Client machen.
 
@SPiKEe
Es klingt aber verdächtig nach nem AutoIncrement. Letztlich gibt es in einer SQL-DB keine Reihenfolge, weil sich jene mit der Query ändert. Deswegen mein Rat, sich mal Gedanken zu machen, die Nummerierung außerhalb von SQL zu machen.

mfg chmee
 
Naja klar ... versteh ich doch ... das die Reihenfolge des Result vom Query abhängt. Soweit ist das ja klar. Aber was würde TO eine Speicherung irgendeines Index *egal ob jetzt als primary auto_increment oder für sonstwas* außerhalb der DB bringen ? Und wie würdest du sowas umsetzen und dann noch in sync mit den Datensätzen ?
 
Moin,
erst mal danke für Eure Antworten.
Als es hat nichts mit einem Key oder Index zu tun.
Das ganze ist für eine Fotogalerie. Und um dort die Bilder in gewünschter reihen folge anzuzeigen,
habe ich die sortorder in der DB zusammen mit der Gruppen Zuordnung und er Namen und Kommentare
zu den Fotos. Wenn jetzt ein Foto hinzu kommt welches ich an einer Bestimmten Stelle haben will kann
ich dies über die Sortorder verschieben und bei bedarf auch löschen.
Und auf das Löschen bezieht sich mein oben gestellt frage.
Gruß Ingo
 
@Spikee: Man kann es ganz einfach innerhalb der Datenbank über Trigger machen.

Hier mal ein Beispiel wie man es machen könnte, inwiefern es einen Sinn ergibt lass ich mal weg.
SQL:
SET @orVar:=0;
UPDATE `Tabelle`
SET `ordering` = (@orVar:=@orVar+1)
ORDER BY `ordering` ASC
 
Zuletzt bearbeitet von einem Moderator:
Moin,
erst mal danke für Eure Antworten.
Als es hat nichts mit einem Key oder Index zu tun.
Das ganze ist für eine Fotogalerie. Und um dort die Bilder in gewünschter reihen folge anzuzeigen,
habe ich die sortorder in der DB zusammen mit der Gruppen Zuordnung und er Namen und Kommentare
zu den Fotos. Wenn jetzt ein Foto hinzu kommt welches ich an einer Bestimmten Stelle haben will kann
ich dies über die Sortorder verschieben und bei bedarf auch löschen.
Und auf das Löschen bezieht sich mein oben gestellt frage.
Gruß Ingo

Sorry ... aber ich sehe deine Frage nicht ...
Kommt denn irgendwas durch ein ander wenn du einen Datensatz löschst oder entsteht lediglich dieses "Loch".
Bei dem Loch : ja gut ... und ? Einfach die Galerie so programmieren das das Loch ignoriert wird. Weil wie "verschiebst" du denn ein Bild ? In dem du außerhalb der DB in deiner Galerie diese SortOrder neu berechnest ... und wo ist es jetzt das Problem dieses mit einem Loch zu tun ?
Wie gesagt : ich sehe deine Frage nicht.
 
Das Problem ist wenn ich ein neues Bild zu einer Gruppe hochlade.
Wenn die Reihenfolge Stimmt, kann ich per Cout abfragen wie viele Bilder der Gruppe angehören und
dem neuen Bild +1 in der Sortorder am Ende anhängen.
Wenn das Loch ist habe ich unter Umständen das Bild an einer falschen Position.
z. B.
1
2
5
7
beim zählen der Bilder würde das neue Bild auch die Sortorder 5 bekommen und nicht 8 um als letztes
Bild zu erscheinen
Gruß
Ingo
 
@Spikee: Man kann es ganz einfach innerhalb der Datenbank über Trigger machen.

Hier mal ein Beispiel wie man es machen könnte, inwiefern es einen Sinn ergibt lass ich mal weg.
SQL:
SET @orVar:=0;
UPDATE `Tabelle`
SET `ordering` = (@orVar:=@orVar+1)
ORDER BY `ordering` ASC
Hm schlau werde ich daraus nicht unbedingt aber ich werde es mal testen.
Trotzdem Danke für das Beispiel.
Gruß Ingo
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück