Update product set order = order+1 where order >= @value changed
Obwohl Sie im Laufe der Zeit immer größere "Leerzeichen" in Ihrer Bestellung erhalten, wird sie dennoch "sortiert"
Dadurch wird 1 zu dem geänderten Wert und jedem Wert danach in einer Anweisung hinzugefügt, aber die obige Aussage ist immer noch wahr. In Ihrer Bestellung bilden sich immer größere "Leerzeichen", die möglicherweise einen INT-Wert überschreiten.
Alternative Lösung bei Wunsch nach Leerzeichen:
Stellen Sie sich eine Prozedur vor für:UpdateSortOrder mit den Parametern @NewOrderVal, @IDToChange, @OriginalOrderVal
Zweistufiger Prozess, je nachdem, ob die neue/alte Bestellung in der Sortierung nach oben oder unten verschoben wird.
If @NewOrderVal < @OriginalOrderVal --Moving down chain
--Create space for the movement; no point in changing the original
Update product set order = order+1
where order BETWEEN @NewOrderVal and @OriginalOrderVal-1;
end if
If @NewOrderVal > @OriginalOrderVal --Moving up chain
--Create space for the momvement; no point in changing the original
Update product set order = order-1
where order between @OriginalOrderVal+1 and @NewOrderVal
end if
--Finally update the one we moved to correct value
update product set order = @newOrderVal where [email protected];
In Bezug auf bewährte Verfahren; Die meisten Umgebungen, in denen ich mich befunden habe, möchten normalerweise etwas, das nach Kategorien gruppiert und alphabetisch oder basierend auf "beliebt im Angebot" sortiert ist, wodurch die Notwendigkeit einer benutzerdefinierten Sortierung entfällt.