Вы можете рассчитать рейтинг при выполнении запроса:
SELECT * FROM (
SELECT teams.*, @rownum := @rownum + 1 AS rank
FROM teams, (SELECT @rownum := 0) T1
ORDER BY score DESC) T2
WHERE id = 1
Он работает, инициализируя переменную rownum равной 0, а затем перебирая строки в порядке убывания оценки.Для каждой команды значение rownum увеличивается, и команде присваивается ранг на основе текущего значения rownum.Внешний выбор применяет предложение where, так что возвращается только одна строка.
Вот улучшенная версия, которая присваивает одинаковый ранг командам, набравшим очки:
SELECT id, name, teams.score, rank FROM (
SELECT score, @rownum := @rownum + 1 AS rank
FROM (SELECT DISTINCT(score) FROM teams) T1, (SELECT @rownum := 0) T2
ORDER BY score DESC) T3
JOIN teams ON T3.score = teams.score
Если это не такнедостаточно быстро, затем используйте триггер.