2012-05-07 9 views
6

Powiedzmy mam te kolumnyAktualizacja mysql kolumna z int na podstawie kolejności

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

Co chcę zrobić jest zmiana MoneyOrder i QuantityOrder na podstawie wartości ORDER BY.

Więc wyniki byłyby:

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

Chcę aktualizacja działać jak kolumna tożsamości bez faktycznie czyni go kolumna tożsamości. Wiem, że mogłem po prostu zamówić przez "x", a kolejność byłaby wynikiem, ale chcę wygenerować raport, w którym można zobaczyć element linia po linii.

Czy jest to możliwe update mytable set Moneyorder = 'imnotsure' order by MoneyOrder asc?

Odpowiedz

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

czy to zrobić w jednym zapytaniu można spróbować

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

dla drugiego zapytania, zgłasza błąd : Niepoprawne użycie UPDATE i ORDER BY – mikewasmike

+0

Uodowałem zapytanie. Czy możesz spróbować? –

5

Patrz odpowiedź na to pytanie:

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;