Как составить запрос для множественного update полей mysql?

Здравствуйте, имеется простенькая таблица с id и числом float. Необходимо выбрать 5 элементов с самым большим числом, уменьшить его на коэффициент (скажем 100), а всем остальным элементам таблицы присвоить значение 1. Как лучше организовать этот массовый update таблицы - через цикл или есть другие решения? помогите пожалуйста составить запрос.
  • Вопрос задан
  • 3037 просмотров
Решения вопроса 1
shcherbanich
@shcherbanich
Программист
INSERT INTO `таблица` (`id_lead`,`value`)VALUES (1,'test'),(3,'hello') ON DUPLICATE KEY UPDATE value=VALUES(value)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Melkij
@Melkij
PostgreSQL DBA
begin;
create temporary table max5float select id as maxid from `table` order by float desc limit 5; -- проверьте что тут будет, я постоянно путаю направления сортировки
update `table` left join max5float on id=maxid set `float`=if(maxfloat is null, 1, `float`*100);
drop temporary table max5float;
commit;

Суть - делаем временную таблицу, куда скидываем айдишники максимальных 5 элементов, потом апдейтим - если таковая строка есть, то умножаем на коэффициент, если во временной таблице строки такой нет - то присваиваем 1.
Ответ написан
balista86
@balista86 Автор вопроса
scherbanich - т.е. циклом я лишь формирую окончательный запрос - верно?
Ответ написан
Ваш ответ на вопрос

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

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