2009-06-01 12 views
3

Ich habe folgende TabelleMYSQL - Erzeugen von Teilmenge Sequenz in einer Tabelle

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

Ich mag es zu aktualisieren, um diese Tabelle zu haben.

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 

Ich fand den perfekten Thread auf SO, aber es war für mssql. Ich benutze MySQL 4.1.10. Der andere Thread kann hier gefunden werden: Generating sequences for subsets of a table.

Weiß jemand, wie ich das in mysql tun kann?

Danke, Jean-Francois

Antwort

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

Hallo, ich habe versucht und Ihre Antwort testen, und es funktioniert nicht. Hier ist der Wert, den ich für das Beispiel dort oben bekomme. 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 Ich arbeite seit etwa 20 Minuten damit, aber es scheint nicht zu funktionieren. Die Idee scheint jedoch großartig, ich denke, es könnte funktionieren. Wenn Sie eine Idee haben, zögern Sie nicht, weitere Informationen hinzuzufügen. –

+0

Ich konnte es zum Laufen bringen. Aber der erste Index ist nicht mehr 1, sondern 0. SET @r: = -1; SET @id: = -1; AKTUALISIERUNG mytable m SET m.UniqueIdBySubSet = FALL WANN @id = 0 DANN @r: = (@id: = m.Id) - m.Id WANN m.Id = @id DANN @r: = @r + 1 ELSE @r: = (@id: = m.Id) - m.Id ENDE ORDER BY m.Id, m.Value; Danke für die Eingabe. Es wurde sehr geschätzt. –

0

eine schnelle Skript schreiben, es zu tun. Es sollte weniger als 10 Zeilen Code in PHP benötigen.

0

Ich denke, Sie finden this article nützlich. Kurz gesagt: Sie können es nicht in genau einer Abfrage tun, aber Sie können es in zwei tun (laden Sie Ihre Daten in eine neue Tabelle und führen Sie eine Insert-Anweisung).

Verwandte Themen