2012-05-07 10 views
6

के आधार पर एक पूर्णांक के साथ एक स्तंभ कहते हैं कि मैं इन स्तंभोंmysql अद्यतन आदेश

uniqueID|Money|Quantity|MoneyOrder|QuantityOrder 
1|23|12|| 
2|11|9|| 
3|99|100|| 

मुझे क्या करना चाहते हैं अद्यतन MoneyOrder और QuantityOrderORDER BY के मूल्य पर आधारित है देता है।

तो परिणाम होगा:

uniqueID|Money|Quantity|MoneyOrder|QuantityOrder 
1|23|12|2|1 
2|11|90|1|2 
3|99|100|3|3 

मैं अद्यतन वास्तव में यह एक पहचान स्तंभ बनाने के बिना एक पहचान स्तंभ की तरह संचालित करने के लिए चाहते हैं। मुझे पता है कि मैं सिर्फ 'एक्स' द्वारा ऑर्डर कर सकता हूं और ऑर्डर परिणाम होगा लेकिन मैं एक रिपोर्ट जेनरेट करना चाहता हूं जहां आप लाइन लाइन को लाइन से देख सकते हैं।

क्या यह संभव है update mytable set Moneyorder = 'imnotsure' order by MoneyOrder asc?

उत्तर

29
SET @rownumber = 0;  
update mytable set Moneyorder = (@rownumber:[email protected]+1) 
order by MoneyOrder asc 

या एक ही प्रश्न में यह करने के लिए आप की कोशिश कर सकते

update mytable target 
join 
(
    select id, (@rownumber := @rownumber + 1) as rownum 
    from mytable   
    cross join (select @rownumber := 0) r 
    order by MoneyOrder asc 
) source on target.id = source.id  
set Moneyorder = rownum 
+0

, एक त्रुटि फेंकता : – mikewasmike

+0

द्वारा अद्यतन और आदेश का गलत उपयोग मैंने क्वेरी को उजागर किया। क्या आप इसे आज़मा सकते हैं? –

5

इस सवाल का उत्तर देखें:

Updating column so that it contains the row position

SET @counter = 0; 

UPDATE 
my_table 
SET MoneyOrder = @counter := @counter + 1 
ORDER BY Money; 

SET @counter = 0; 

UPDATE 
my_table 
SET QuantityOrder = @counter := @counter + 1 
ORDER BY Quantity; 
दूसरी क्वेरी के लिए