2009-07-29 15 views
1

Seit zehn Jahren haben wir die gleiche benutzerdefinierte Sortierung auf unseren Tischen, ich frage mich, ob es eine andere Lösung, die weniger Updates enthält, vor allem seit heute würden wir Ich möchte ein Replikations-/Veröffentlichungsdatum haben und möchte nicht, dass unsere Replikation unnötige Einträge repliziert. Ich habe mir geschachtelte Sätze angesehen, aber das scheint uns nicht zu helfen.benutzerdefinierte Sortierung oder Bestellung einer Tabelle ohne die gesamte shebang

Basistabelle:

id | a_sort 
---+------- 
1 10 
2 20 
3 30 

Nach dem Einlegen:

insert into table (a_sort) values(15) 

Ein Eintrag in der zweiten Position.

id | a_sort 
---+------- 
1 10 
2 20 
3 30 
4 15 

Bestellinformation den Tisch mit:

select * from table order by a_sort 

und der Rückgriff auf alle Einträge a_sort mindestens ID Aktualisierung = (2,3,4)
wird selbstverständlich das gewünschte Ausgangs:

Die Spaltennamen, die Spaltenanzahl, Datentypen, eine mögliche Verknüpfung, mögliche Auslöser oder die Art des Resorts Das ist nicht relevant für das Problem. Auch haben wir einige ziemlich nette Wege gefunden, diese Aufgabe schnell zu erledigen.

nur; wie zum Teufel können wir die Updates in der db auf 1 oder 2 max reduzieren.

Scheint wie ein schrecklich häufiges Problem.

Der Kapitän offensichtlich in mir dachte einmal "Verwenden Sie eine a_sort float (53), einfügen mit einem festen Wert von ordervaluefirstentry + abs (ordervaluefirstentry-ordervaluenextentry)/2".
Aber das würde nur etwa 1040 "dazwischen" -Einträge erlauben - so scheint nie ein Umsortieren ein bisschen problematisch;)

+0

Ooh, das macht für einen knackenden neuen Tag, das – skaffman

+0

ein sehr selten verwendetes neues Tag macht? –

+0

die beste Art !! – skaffman

Antwort

0

Sie wirklich nicht beschreiben, was Sie mit diesen Daten tun, also vergib mir, wenn dies ein ist Verrückte Idee für Ihre Situation:

Sie könnten eine Art "verknüpfte Liste" machen, wo Sie anstelle einer Spalte von Werten eine Spalte für die 'nächsthöchsterwertige' ID haben. Dies würde die Anzahl der Updates auf maximal verringern 2.

Sie können es verknüpft machen doppelt und haben auch eine Spalte für die nächste niedrigste, die die maximale Anzahl von Updates zu 3.

See bringen würde: http://en.wikipedia.org/wiki/Linked_list

+0

mit einer verknüpften Liste mit IDs (häufig in oop) würde ich ein Problem mit der rekursiven Select-Anweisung haben, um zu den geordneten Daten zu gelangen. Wie würdest du die sql (-92) -Anweisung schreiben? –

+0

Sie können es leicht auf der Clientseite sortieren. Wählen Sie die Reihenfolge in der Linkspalte aus, so dass Sie zuerst den Nullwert erhalten (vorausgesetzt, dass Sie doppelt verknüpft sind, andernfalls benötigen Sie einen Hauptknoten), und durchlaufen Sie die Schleife, bis Sie eine weitere Null erhalten. Ich nehme an, Sie sortieren auf der Client-Seite für das Update sowieso. Sie könnten es auch mit einer gespeicherten Prozedur tun. – Charlie

Verwandte Themen