@vovaaar

Как обновить столбец максимальным значением?

Как обновить столбец salt_quests максимальным значением?
Update по условию нашел 2 записи, нужно по всем записям, найти максимальное значение в столбце salt_quests. Пробовал подзапросом, но выдает ошибку (невозможно использовать таблицу repository_quests в подзапросе)
UPDATE repository_quests 
  SET status_game_quests = 1, status_progress_registration_quests = 0, 
    salt_quests = (SELECT MAX(salt_quests) + 1 FROM repository_quests) 
    WHERE status_accessibility_quests = 1 
        AND status_active_quests = 1 
        AND status_game_quests = 0 
        AND status_progress_registration_quests = 1 
        AND NOW() >= registration_date_quests;
  • Вопрос задан
  • 96 просмотров
Решения вопроса 2
artemiy_karkusha
@artemiy_karkusha
Гость в этой жизни.
Вы столкнулись с ограничениями подзапросов команды dml (update);
Вам нужно сначала посчитать максимальное значение через предварительный запрос, а уже после в виде переменной использовать это значение.

Решение:
@salt_quest = SELECT MAX(salt_quests) + 1 FROM repository_quests;
UPDATE repository_quests SET status_game_quests = 1, status_progress_registration_quests = 0, salt_quests = @salt_quest
    WHERE status_accessibility_quests = 1 
        AND status_active_quests = 1 
        AND status_game_quests = 0 
        AND status_progress_registration_quests = 1 
        AND NOW() >= registration_date_quests;
Ответ написан
@vovaaar Автор вопроса
Чуть модернизировал код:

SET @salt_quest = (SELECT MAX(salt_quests) FROM repository_quests);

UPDATE repository_quests SET status_game_quests = 1, status_progress_registration_quests = 0, salt_quests = @salt_quest:= @salt_quest + 1
              WHERE status_accessibility_quests = 1 
                  AND status_active_quests = 1 
                  AND status_game_quests = 0 
                  AND status_progress_registration_quests = 1 
                  AND NOW() >= registration_date_quests;
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы