Обновить рейтинг mysql по значению столбца, сгруппированному по значению столбца

Начиная с этих примеров.

1 ранг mysql по значению столбца, сгруппированному по значению столбца

2 Несколько рангов в одной таблице

Они объясняют, как вычислить ранг, сгруппированный по значению столбца. В моем случае отправить

Мне нужно обновление столбца "rank" вместо выбора

| iduser | ship  | score | rank  |
+--------+-------+-------+-------+
|   25   |   1   |   7   |   0   |
|   25   |   3   |  21   |   0   |
|   25   |   4   |  30   |   0   |
|   12   |   9   |  23   |   0   |
|   25   |   9   |  18   |   0   |
|   21   |   9   |   5   |   0   |

Необходимо обновить:

| iduser | ship  | score | rank  |
+--------+-------+-------+-------+
|   25   |   1   |   7   |   1   |
|   25   |   3   |  21   |   1   |
|   25   |   4   |  30   |   1   |
|   12   |   9   |  23   |   1   |
|   25   |   9   |  18   |   2   |
|   21   |   9   |   5   |   3   |

Это запрос выбора

SELECT  iduser,
        ship,
        score,
        ( 
            CASE ship 
            WHEN @curShip 
            THEN @curRow := @curRow + 1 
            ELSE @curRow := 1 AND @curShip := ship END
        ) AS rank
FROM    ship_stats,
        (SELECT @curRow := 0, @curShip := '') r
ORDER BY ship DESC, score DESC;

person Micky    schedule 16.04.2016    source источник
comment
Итак, вы ищете заявление об обновлении? tutorialspoint.com/mysql/mysql-update-query.htm   -  person    schedule 16.04.2016
comment
да. Мне нужно обновление :)   -  person Micky    schedule 16.04.2016
comment
Почему один из пользователей должен писать код за вас. Хотя бы попробуйте сами. Если у вас возникнут проблемы, вернитесь и задайте конкретный вопрос.   -  person RiggsFolly    schedule 16.04.2016
comment
Приведите пример кода, который вы пытались написать.   -  person Conspicuous Compiler    schedule 16.04.2016
comment
Я думал, что это ясно из названия. Я сделал выбор. Но у меня не получилось сделать обновление. Пример в схеме, которую я сделал. и в запросе выбора.   -  person Micky    schedule 16.04.2016
comment
@RiggsFolly Я пробовал сам. Это конкретный вопрос: я нашел несколько подобных примеров на stackoverflow. Но не обновлять. Поэтому я подумал, что это может быть полезно и для других. :)   -  person Micky    schedule 16.04.2016


Ответы (1)


SET @curship = 0,@curRow = 0;
UPDATE ship_stats 
SET rank := 
        (CASE ship 
            WHEN @curShip 
            THEN @curRow := @curRow + 1 
            ELSE @curRow := 1 AND @curShip := ship END
        )
ORDER BY ship DESC, score DESC;

sqlfiddle

person Tin Tran    schedule 16.04.2016