3 回答

TA貢獻(xiàn)1942條經(jīng)驗(yàn) 獲得超3個(gè)贊
Update product set order = order+1 where order >= @value changed
盡管隨著時(shí)間的流逝,您會在訂單中獲得越來越大的“空間”,但仍會“排序”
這將在一個(gè)語句中為要更改的值及其后的每個(gè)值加1,但以上語句仍然為真。您的訂單中將形成越來越大的“空格”,甚至可能超過INT值。
給定無空格的替代解決方案:
想象一下以下過程:具有@ NewOrderVal,@ IDToChange,@ OriginalOrderVal參數(shù)的UpdateSortOrder
分兩步進(jìn)行,取決于新/舊訂單是向上還是向下排序。
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 ID=@IDToChange;
關(guān)于最佳實(shí)踐;我去過的大多數(shù)環(huán)境通常都希望按類別對它們進(jìn)行分類并按字母順序或基于“受歡迎程度”進(jìn)行排序,從而無需提供用戶定義的排序。

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊
我過去使用的一種解決方案(取得了一些成功)是使用“重量”而不是“順序”。重量很明顯,較重的物品(即:數(shù)字越?。┏寥氲撞?,越輕(數(shù)字越大)則升至頂部。
如果我有多個(gè)重量相同的物品,我認(rèn)為它們具有相同的重要性,并按字母順序排列。
這意味著您的SQL將如下所示:
ORDER BY 'weight', 'itemName'
希望能有所幫助。
- 3 回答
- 0 關(guān)注
- 813 瀏覽
添加回答
舉報(bào)