2012-07-16 12 views
7

Ich benutze MySQL. Ich habe eine Tabelle, wo ich in der Lage sein muss, die Priorität/Reihenfolge der Reihen manuell zu sortieren. Ich hatte ursprünglich daran gedacht, jeder Reihe eine beliebige Reihenfolge zuzuweisen (1, 2, 3, usw.), dann einfach die Reihenfolge mit der verschobenen Reihe zu "vertauschen", aber ich denke nicht, dass dies der beste Weg ist.Beste Möglichkeit, Sortierreihenfolge/Priorität zu speichern?

Nach einigen Lesen bei verwandten Fragen hier (like this one), haben viele Leute gesagt, einen Wert zu der Priorität Spalte basierend auf der ID-Spalte (ID * 1000) zuweisen. Und um die Zeilen neu anzuordnen, würden Sie den Unterschied zwischen den Spalten teilen/subtrahieren. Ich verstehe nicht ganz, wie das funktioniert.

Dies ist das Layout der Tabelle, die ich sortieren muss.

CREATE TABLE liability_detail (
    id int NOT NULL AUTO_INCREMENT, 
    analysis_id int NOT NULL, //(many-to-one relationship with analysis table) 
    other_columns various datatypes 
    sequence int DEFAULT 0 
) 

möchte ich Setup wie eine einfache Möglichkeit, die Priorität der Reihen zu verwalten, so kann ich sie leicht sortieren, ohne viel Code zu schreiben, alles zu verwalten.

+0

Ich glaube mit ein wenig mehr Detail wäre es möglich, dies ohne solche Tricks als eine "Priorität" Spalten zu beantworten, die ausgetauscht oder aktualisiert wird. Können Sie die Formel für die Prioritätsberechnung aufstellen? Was ist der Grund für das "Bewegen von Reihen"? Ich vermute, dass eine ordnungsgemäße 'ORDER BY' möglich wäre, –

+0

zu produzieren. Betrachten Sie die verknüpfte Liste Ansatz. Dies vermeidet, dass alle anderen Zeilen aktualisiert werden müssen, wenn eine Zeile in der Liste nach oben oder unten verschoben wird. Bei einer verknüpften Liste müssen Sie nur höchstens drei Zeilen aktualisieren (einschließlich der Zeile, die Sie verschieben). Natürlich ist es schwer, dagegen zu fragen, also würden Sie die Bestellung wahrscheinlich nur im Code implementieren. –

+0

Diese Anwendung führt Finanzanalysen für unsere Kunden durch. Unsere Benutzer müssen in der Lage sein, einige Finanzen zu priorisieren, indem sie an die Spitze gebracht werden, und die Finanzen mit niedrigerer Priorität nach unten zu verschieben. Dieser Prozess ist manuell, da es einfach zu viele Faktoren gibt, um eine automatische Sortierung mithilfe von ORDER BY durchzuführen. Manchmal müssen Benutzer eine Zeile von der Mitte nach oben und manchmal die zweite Zeile nach unten verschieben. – Jeff

Antwort

3

landete ich in dieser Frage nach der Beratung bis: https://stackoverflow.com/a/6804302/731052

ich die Art Ordnung Spalte = id * 1000, so konnte ich einzigartige Aufträge bekommen gesetzt. Bis jetzt funktioniert das sehr gut und hatte keine Probleme damit.

Verwandte Themen