Простое обновление ранга MySQL со связями

Я пытаюсь сохранить рейтинг пользователей на основе оценки, все это в одной таблице, и пропускает ранги, когда есть связь. Например:

ID   Score Rank
2    23    1
4    17    2
1    17    2
5    10    4
3    2     5

Каждый раз, когда обновляется оценка пользователя, также должен обновляться ранг для всей таблицы, поэтому после обновления оценки запускается следующий запрос:

SET @rank=0;
UPDATE users SET rank= @rank:= (@rank+1) ORDER BY score DESC;

Но это не поддерживает связи или пропуск числа рангов после связей, в этом отношении.

Я хочу добиться такого повторного ранжирования в минимально возможном количестве запросов и без соединений (так как они кажутся довольно трудоемкими).

Я смог получить желаемый результат, добавив два столбца - last_score и tie_build_up - со следующим кодом:

SET @rank=0, @last_score = null, @tie_build_up = 0;
UPDATE users SET
    rank= @rank:= if(@last_score = score, @rank, @rank+@tie_build_up+1),
    tie_build_up= @tie_build_up:= if(@last_score = score, @tie_build_up+1, 0),
    last_score= @last_score:= score, ORDER BY score DESC;

Мне не нужны эти дополнительные столбцы, но я не мог заставить один запрос работать без них.

Есть идеи?

Благодарю.

Ответы на вопрос(3)

Ваш ответ на вопрос