Во-первых, давайте исправим ваш запрос, чтобы он работал на MySQL <8.0. Это требует выполнения вычислений и сортировки в подзапросе, а затем с использованием переменной для вычисления ранга: </p>
select
id,
rating,
@rnk := @rnk + 1 ranking
from
(select @rnk := 0) r
cross join (
select
fighter1 id,
round(((avg(indrating)*13) + (avg(fightrating)*5) * 20) / 2,2) as rating
from fights
group by fighter1
order by rating desc
) x
Теперь мы используем синтаксис update ... join ... set ...
для обновления таблицы fighters
:
update fighters f
inner join (
select
id,
rating,
@rnk := @rnk + 1 ranking
from
(select @rnk := 0) r
cross join (
select
fighter1 id,
round(((avg(indrating)*13) + (avg(fightrating)*5) * 20) / 2,2) as rating
from fights
group by fighter1
order by rating desc
) x
) y on y.id = f.id
set f.ranking = y.ranking;
Демонстрация в скрипте MySQL 5.6 на основе скрипта, который вы указали в комментариях.
Запрос на выборку возвращает:
| id | rating | ranking |
| --- | ------ | ------- |
| 3 | 219.5 | 1 |
| 4 | 213 | 2 |
| 1 | 169.5 | 3 |
| 2 | 156.5 | 4 |
А вот содержимое таблицы fighters
после update
:
| id | lastname | ranking |
| --- | ---------- | ------- |
| 1 | Gustafsson | 3 |
| 2 | Cyborg | 4 |
| 3 | Jones | 1 |
| 4 | Sonnen | 2 |