【发布时间】:2011-07-28 07:53:37
【问题描述】:
我有一个名为 Shop 的模型,它有很多 Products。
我正在尝试根据商店拥有的苹果、橙子和芒果的数量一次对 10 家商店进行分类和显示。
每家商店的苹果比橙子多,橙子比芒果多。商店将从苹果最多的商店开始排序。
编写此查询最有效的方法是什么?
谢谢!
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 activerecord
我有一个名为 Shop 的模型,它有很多 Products。
我正在尝试根据商店拥有的苹果、橙子和芒果的数量一次对 10 家商店进行分类和显示。
每家商店的苹果比橙子多,橙子比芒果多。商店将从苹果最多的商店开始排序。
编写此查询最有效的方法是什么?
谢谢!
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 activerecord
您的问题缺乏信息,因此我将假设以下表格:
------------- -----------------------------------------------------------
| Shop | | Stock |
------------- -----------------------------------------------------------
| id | name | | id | shop_id | apple_count | orange_count | mango_count |
------------- -----------------------------------------------------------
基本上,您要求的是 rails 方式:
select shop.name
,apple_count
,orange_count
,mango_count
from current_stock
inner join shop on current_stock.shop_id = shop.shop_id
order by apple_count desc
,orange_count desc
,mango_count desc
limit 10
您可以通过以下方式实现:
Shop.joins(:stocks).order("apple_count desc, orange_count desc, mango_count desc").limit(10)
希望这会有所帮助!
【讨论】:
Shop has_many :products, :through => :stockProduct has_many :shops, :through => :stockStock 模型具有shop_id product_id。可能不仅仅是苹果、橙子和芒果产品,因此我在商店和产品之间创建了另一个模型。