Update product set order = order+1 where order >= @value changed
हालांकि समय के साथ आपको अपने क्रम में बड़े और बड़े "रिक्त स्थान" मिलेंगे लेकिन यह अभी भी "क्रमबद्ध" होगा
यह बदले जा रहे मान में 1 जोड़ देगा और उसके बाद प्रत्येक मान एक कथन में जोड़ देगा, लेकिन उपरोक्त कथन अभी भी सत्य है। आपके क्रम में बड़े और बड़े "रिक्त स्थान" बनेंगे जो संभवतः एक INT मान को पार करने के बिंदु तक पहुंचेंगे।
वैकल्पिक समाधान ने रिक्त स्थान की इच्छा नहीं दी:
इसके लिए एक प्रक्रिया की कल्पना करें:@NewOrderVal, @IDToChange,@OriginalOrderVal
के पैरामीटर के साथ UpdateSortOrderनया/पुराना ऑर्डर क्रम में ऊपर या नीचे जा रहा है या नहीं, इस पर निर्भर करते हुए दो चरणों की प्रक्रिया।
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];
सर्वोत्तम अभ्यास के संबंध में; अधिकांश वातावरण में मैं आमतौर पर श्रेणी के आधार पर समूहीकृत कुछ चाहता हूं और वर्णानुक्रम में या "बिक्री पर लोकप्रियता" के आधार पर क्रमबद्ध किया गया है, इस प्रकार उपयोगकर्ता परिभाषित प्रकार प्रदान करने की आवश्यकता को नकार रहा है।