У меня есть таблица 'photos', у каждой фотографии есть оценка, из десяти баллов:
-- ID -- fileName -- grade -- last_rank_computed
1 fn.jpg 6 NULL
2 fn2.jpg 1 NULL
3 fn3.jpg 2.5 NULL
4 fn4.jpg NULL NULL
Мне нужно заполнить поле last_rank_computed путем вычисления рейтинга за все фотографии (где оценка!= ноль).Результат будет:
-- ID -- fileName -- grade -- last_rank_computed
1 fn.jpg 6 1
2 fn2.jpg 1 3
3 fn3.jpg 2.5 2
4 fn4.jpg NULL NULL
Я пробовал этот запрос:
update photos
set last_rank_computed = RANK() OVER ( ORDER BY grade desc )
where grade_avg is not null
Но MySQL говорит:
Вы не можете использовать оконную функцию 'rank'в этом контексте.
Я мог бы сделать это непосредственно в PHP, извлекая все строки с соответствующими им рангами (потому что это работает в запросе SELECT), и делать N запросов UPDATE, но я думаю, что это будет плоходля исполнения.Если у меня есть 50000 фотографий для обработки, может быть, это более эффективно с MySQL, с точки зрения производительности (время и память), но, пожалуйста, скажите мне, если я не прав.