Самый эффективный способ получения записей "top x" с использованием Rails - PullRequest
6 голосов
/ 15 ноября 2010

Мы получили запрос на отчет, и я пытаюсь найти самый простой и эффективный способ получения цифр.

У меня есть модель Сделка с двумя атрибутами: _quantity_purchased_ и цена . Меня попросили получить список 100 самых продаваемых сделок в базе данных. Чтобы увидеть, насколько хорошо сделка заключена, мы умножаем количество выкупленной цены на цену.

Теперь я уверен, что мог бы написать что-то замысловатое, чтобы получить свои результаты, но это кажется такой простой операцией, что должен быть более простой способ сделать это. Есть ли что-то, что я мог бы сделать в MySQL или с помощью Ruby / Rails? Или я застрял в поиске какой-то неприятной петли?

К вашему сведению, мы запускаем Rails 2.3.

Ответы [ 2 ]

10 голосов
/ 15 ноября 2010

Вы можете передать параметр :limit в метод find, чтобы ограничить количество возвращаемых результатов. В сочетании с параметром :order вы можете получить 100 лучших результатов:

Deal.find(:all, :order => 'quantity_purchased * price', :limit => 100);

Обратите внимание, что для Rails 3 правильный способ написания этого запроса был бы

Deal.order('quantity_purchased * price').limit(100)
1 голос
/ 15 ноября 2010
class Deal < ActiveRecord::Base
  named_scope :top_deals, :select => 'quantity_purchased * price', :order => '1 DESC', :limit => 100
end

Это должно сделать это. В MySQL вы можете использовать «ORDER BY 1» для сортировки по первому столбцу в списке выбора и т. Д.

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