Im возвращает набор записей из таблицы, упорядочивая самую высокую отметку.
Select name,score from score_tbl order by score desc
Теперь то, что я хочу сделать, это то, что на score_tbl
есть столбец с именем position
который я хочу использовать оператор update для обновления этого столбца на основе запроса select, чтобы позиция обновлялась на основе оценки пользователей
Похоже, вы хотите обновить значение "position" для всех строк в вашей таблице на основе поля "score". Другими словами, строка с наивысшим результатом получает значение позиции 1. Попробуйте следующее:
UPDATE score_tbl
FROM (
SELECT name, RANK() OVER(ORDER BY score DESC) ScorePosition
FROM score_tbl
) src
SET position = src.ScoreRank
WHERE name = src.name
Для этого используется таблица "src", в которой вы создаете ранжирование для обновления целевой таблицы. Это предполагает, что "имя" - это ПК для вашей таблицы.
Не знаете, что такое ваша БД, поэтому вам, вероятно, придется немного настроить запрос. Но это должно заставить вас идти. Дайте мне знать, как это происходит.
обновленный
Попробуйте выполнить запрос ниже:
UPDATE competitors
INNER JOIN (
SELECT
id,
RANK() OVER w AS 'ScorePosition'
FROM competitors
WINDOW w AS (ORDER BY score DESC)
) src ON competitors.id = src.id
SET position = src.ScorePosition;
Похоже, что функции Windows были введены в MySQL 8.0, поэтому вам нужен доступ к этой версии. У меня нет доступа к этой версии, поэтому я не смог проверить. Но дайте мне знать, если это сработает.
Кроме того, посмотрите на этот пост для некоторой помощи: