2010-12-22 6 views
2

у меня есть таблица рекордов, которая содержит два столбца: user_id и scoreПомощи сортировки записей в Ruby On Rails

user_id         счет
                                                                                                                                  44447 +819055319431365588888                                                                                                       ......

Score.order('score DESC').limit(3) содержит 3 лучших результата. Вместо этого, как мне получить лучшие 3 балла, где каждый пользователь получает только одно место в списке (их самый высокий балл).

Высокие баллы из приведенной выше таблицы будет:

user_id: 4 оценка: 500
user_id: 2 Оценка: 345
user_id: 1 балл: 230

Спасибо!

Tim

ответ

6

Вы должны быть в состоянии группировать Ваш запрос:

Score.order('score DESC').group('user_id').limit(3) 
+0

Работал как шарм! благодаря – Tim

2
Score.all(:order => 'score DESC', :limit => 3, :group => :user_id) 

С новым Arel:

Score.group(:user_id).order('score DESC').limit(3) 
+0

Делать это все старая школу Rails 2 стилем! – tadman

+0

Да, раньше у меня не было. Я собирался отредактировать его: Score.group (: user_id) .order ('score DESC'). Limit (3) – tokland

+0

Вопрос: Имеет ли значение, называется ли группа первым или первым называется заказ? – Zabba

Смежные вопросы