Как обновить часть таблицы за один запрос?

132
07 сентября 2019, 18:20

есть таблица игроков:

есть таблица рейтинга:

Мне необходимо добавлять золото в поле player_gold согласно рейтингу из поля rating_quest_0.

Мой запрос:

SET @a:=51;
UPDATE resources_players 
  SET player_gold = player_gold + @a:=@a-1 
  WHERE player_id IN ( SELECT player_id 
                       FROM resources_quests 
                       ORDER BY rating_quest_0 DESC ) LIMIT 50;

для связи использую id игроков. Произвожу сортировку по полю рейтинга, и беру id шники подзапросом в in. После чего присваиваю золото (первому в рейтинге 50, далее 49 и так далее).

Все работает отлично, но проблема в том что оператор in содержит сразу все id (в порядке присваивания) Но запрос начинает выполняться не в том порядке, в котором я хочу а применяет к той строке, которую первую нашел в in.

Как можно решить эту задачу 1 запросом. Не хотелось бы через цикл делать 50 запросов. Спасибо!

Answer 1
SET @a:=51;
UPDATE resources_players rp INNER JOIN (SELECT player_id FROM resources_quests WHERE rating_quest_0 != 0 ORDER BY rating_quest_0 DESC LIMIT 50) rq SET player_gold = player_gold + @a:=@a-1 WHERE rp.player_id = rq.player_id;
READ ALSO
обойти сайты не нагружая сервера

обойти сайты не нагружая сервера

Есть много доменов, которые нужно обойти, если начать в несколько потоков долбить сайты можно попасть на поддомены, принадлежащие одному...

114
Использование переменных при Ajax в WordPress

Использование переменных при Ajax в WordPress

Есть страница, на которой вывожу штук 20 постов

130
Расширить поля при оплате

Расширить поля при оплате

как добавить свои поля - type_pay(число),days(количество дней),user при оплате через paypal

136
Валидация большой формы

Валидация большой формы

Есть несколько больших форм, в которых сотни реквизитов, они заполняются вручнуюИ при сохранении нужно провести логический контроль заполненной...

123