2009-06-01 14 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 

Я нашел идеальную нить на SO, но это было для mssql. Я использую mysql 4.1.10.

Другая нить можно найти здесь: 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 = CASE 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

Написать быстрый скрипт, чтобы сделать это. Он должен принимать менее 10 строк кода в php.

0

Я думаю, вы найдете this article полезным. Короче: вы не можете сделать это в одном запросе, но вы можете сделать это пополам (загрузите свои данные в новую таблицу и выполните инструкцию insert).