मान लें कि id
प्रत्येक पंक्ति के लिए अद्वितीय है, आप इसे चर के साथ कर सकते हैं:
update <table> t join
(select t.id, @rn := @rn + 1 as seqnum
from <table> t cross join (select @rn := 0) vars
order by old_position
) tt
on tt.id = t.id
set t.position = tt.seqnum;
यदि आप चाहें, तो आप इसे बिना सबक्वेरी के लिख सकते हैं। चुनौती चर को परिभाषित कर रही है। यहाँ एक विधि है:
update <table> t
set t.position = (@rn := coalesce(@rn, 0) + 1)
order by old_position;
आप सबक्वेरी में वेरिएबल को इनिशियलाइज़ नहीं कर सकते क्योंकि MySQL दोनों को join
. की अनुमति नहीं देता है और order by
एक update
. में बयान।