10

これらの列があるとしましょう

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

私がやりたいのは、の値に基づいて更新するMoneyOrderことQuantityOrderですORDER BY

したがって、結果は次のようになります。

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

更新を実際にID列にすることなく、ID列のように動作させたい。'x'で並べ替えることができ、並べ替えが結果になることはわかっていますが、アイテムを1行ずつ表示できるレポートを生成したいと思います。

このようなことは可能update mytable set Moneyorder = 'imnotsure' order by MoneyOrder ascですか?

4

2 に答える 2

43
SET @rownumber = 0;    
update mytable set Moneyorder = (@rownumber:=@rownumber+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
于 2012-05-07T16:41:01.220 に答える
7

この質問への回答を参照してください。

行の位置が含まれるように列を更新しています

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;
于 2012-05-07T16:42:32.107 に答える