Простое обновление ранга 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;
Мне не нужны эти дополнительные столбцы, но я не мог заставить один запрос работать без них.
Есть идеи?
Благодарю.