Frage

Ich habe eine Tabelle, die Aufgaben enthält, und ich möchte diese eine explizite Ordnung auf der Priorität der Aufgabe zugrunde, geben. Die einzige Möglichkeit, die ich denken kann, dies zu tun ist über eine einzigartig int-Spalte, die Indizes in denen die Aufgabe in der Bezeichnung der Priorität (d 1 ist top 1000 niedrig ist).

Das Problem ist, dass sagen, ich wollte Aufgabe aktualisieren und legen ihre Priorität auf einen niedrigeren Wert, ich hätte alle anderen Zeilen zwischen dem aktuellen Wert und den neuen Wert aktualisieren.

Kann jemand empfehlen, einen besseren Weg, dies zu implementieren?

War es hilfreich?

Lösung

eine reelle Zahl Wert als Priorität verwenden. Sie können einen Wert zwischen zwei vorhandenen Werten mit so etwas wie newPri = task1Pri + (task2Pri - task1Pri)/2 immer gleiten, wo Task1 die niedrigere Priorität numerischen Wert hat (was wahrscheinlich der höhere piority ist).

Corin weist darauf hin, dass Min- und Max-Prioritäten würden für Aufgaben am oberen oder unteren Ende der Prioritätenliste eingefügt berechnet werden müssen.

Und joelhardi erinnert uns daran, dass ein Neuordnungs Prozess ist eine gute Idee, die Tabelle von Zeit zu Zeit, um aufzuräumen.

Andere Tipps

Statt eine nummerierte Spalte zu schaffen wie Sie gesagt haben, erstellen Sie ein Feld etwas wie Eltern genannt. Jede Zeile enthält die pk des übergeordneten Elements. Wenn Sie wollen einfach nur ein Element nach unten bewegen ihre Mutter pk auf die neue ändern und die Position (en), die sie in ihrer Mutter pk verweisen. Denken Sie einfach verkettete Listen.

Ich mag Kevins Antwort am besten, aber wenn Sie eine schnelle und unsaubere Lösung wollen, tun Sie es einfach so, wie Sie bereits beschrieben habe, aber statt von 10 oder 100 von 1, Schrittweite erhöht wird ... auf diese Weise, wenn Sie müssen neu priorisieren, können Sie ein wenig Spielraum zwischen Aufgaben haben.

Ich würde zuweisen nur eine kleine Anzahl von Werten (1..10) und dann ORDER BY Priority DESC, ASC Datecreated. Wenn Sie unterschiedliche Prioritäten für jede Aufgabe haben müssen Sie müssen UPDATE WHERE Priorität> xxx wie du gesagt hast.

, wenn keine zwei Aufgaben die gleiche Priorität haben, dann denke ich, dass das, was Sie zu tun haben. Aber Sie könnten eine Priorität und eine DateModified Spalte haben und einfach irgendwie durch beide die richtige Reihenfolge auf Priorität und letzte Aktualisierung basierend bekommen, wenn Sie Priorität erlauben dupliziert werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top