2009-06-01 6 views
3

でサブセットのシーケンスを生成する私は、このテーブルを持って、それを更新したいと思います次の表MYSQL - テーブル

Id Value 
1  3 
1  12 
1  67 
2  7 
2  99 
5  30 
5  33 
5  4 
5  87 
5  12 
5  1 

を持っています。

Id UniqueIdBySubSet Value 
1   1    3 
1   2    12 
1   3    67 
2   1    7 
2   2    99 
5   1    30 
5   2    33 
5   3    4 
5   4    87 
5   5    12 
5   6    1 

私は完璧なスレッドを見つけましたが、mssql用です。私はMySQL 4.1.10を使用します。

もう1つのスレッドはGenerating sequences for subsets of a tableです。

誰かが私がmysqlでそれを行う方法を知っていますか?

答えて

3
SET @r := 0; 
SET @id := 0; 
UPDATE mytable m 
SET  m.UniqueIdBySubSet = IF(@id = id, @r := @r + 1, @r := (@id := id) - id) 
ORDER BY 
     id, value; 
+0

こんにちは、私はあなたの答えを試してみて、それは動作しません。私が上の例で得た価値は次のとおりです。 1、1、3 1、2、12 1、3、67 2、1、7 2、2、99 5、3、1 5、4、4 5、5、12 5 、6、30 5,7,33 5,8,87 私は約20分間それを使っていましたが、うまく動作しないようです。アイデアは素晴らしいようだが、私はそれがうまくいくと思う。 ご意見がありましたら、お気軽に情報を追加してください。 –

+0

私はそれを動作させることができました。しかし、最初のインデックスはもはや1ではなく、0である。 SET @r:= -1; SET @id:= -1; UPDATE mytable m SET m.UniqueIdBySubSet =ケース WHEN @ id = 0 THEN @r:=(@id:= m.Id) - m.Id WHEN m.Id = @id THEN @r:= @r + 1 ELSE @r:=(@ id:= m.Id) - m.Id END ORDER BY m.Id、m.Value; 入力いただきありがとうございます。本当に感謝しています。 –

0

、 ジャン=フランソワありがとうはそれを行うための簡単なスクリプトを書きます。それはPHPで10行未満のコードを取る必要があります。

0

this articleが便利だと思います。つまり、正確に1つのクエリで実行することはできませんが、2つで(データを新しいテーブルにロードしてinsert文を実行して)実行できます。