Задать вопрос

Как проинкрементировать поле в таблице по юзерам?

Пытаюсь сделать закладки с возможностью менять порядок. Есть users со связью один ко многим к bookmarks.

Добавил целочисленное поле priority к bookmarks.

Как в миграции проинкрементировать поле в общей куче примерно понимаю:

Bookmark.update_all('priority = priority + 1')

или

ActiveRecord::Base.transaction do
  ActiveRecord::Base.connection.execute('SET @pri := 0;')
  ActiveRecord::Base.connection.execute('UPDATE bookmarks SET priority = ( SELECT @pri := @pri + 1 ) ORDER BY updated_at ASC;')
end


Что даст следующее:

bookmarks:

user_id: 1, priority:1
user_id: 2, priority:2
user_id: 1, priority:3
user_id: 2, priority:4


А как сделать так чтобы поле было проинкрементировано по пользователю? Т.е. чтобы получить:

bookmarks:
user_id: 1, priority:1
user_id: 2, priority:1
user_id: 1, priority:2
user_id: 2, priority:2


База большая поэтому ищу решение с максимальным использованием средств бд(Mysql).
  • Вопрос задан
  • 66 просмотров
Подписаться 1 Средний Комментировать
Решение пользователя ТыжСисАдмин К ответам на вопрос (3)
POS_troi
@POS_troi
СадоМазо Админ, флудер, троль.
В один запрос и красиво не выйдет, придёться для каждого юзера отдельно проводить, но так как операция одноразовая то не вижу никаких проблем это сделать.
Ответ написан
Комментировать