rails - как указать заданное количество лучших уникальных результатов, возвращаемых в данном запросе соединения - PullRequest
0 голосов
/ 06 января 2012

Я пытаюсь получить запрос, который получит 20 лучших уникальных «участников» на основе их лучших «баллов по отчетам». проблема заключается в том, что если второй лучший отчет по результатам отчета также входит в топ-20, то запрос возвращает только 19 участников

top_members  = Member.all(:joins=>[:reports],  :conditions => ["score > 0"],:order      => ["score DESC"],:limit      => 20).uniq 

Что мне нужно сделать, чтобы запрос продолжался до тех пор, пока у меня не будет 20 участников?

Спасибо!

Ответы [ 2 ]

1 голос
/ 06 января 2012

В данный момент вы получаете 20 результатов из базы данных, а затем отбрасываете дубликаты при вызове uniq().Вместо этого вы можете выбрать отдельные результаты из базы данных, например:

top_members = Member.all(:joins=>[:reports], 
  :conditions => ["score > 0"],
  :order => ["score DESC"], 
  :limit => 20, 
  :select => 'DISTINCT members.*').uniq 
1 голос
/ 06 января 2012

Я думаю, вам придется сделать это в два этапа:

1) id_list = Member.all(:select => 'distinct id', :conditions => ["score > 0"],:order => ["score DESC"],:limit => 20

2) top_members = Member.find(id_list, :joins=>[:reports]).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...