1

我有一个这样的模型(Rails 2)

MyModel :
- id
- category_id
- value
- my_model_count

我想得到前 10 个我的模型,按他们的类别分组。

有可能:

all_mymodels = MyModel.find(:all, :order => 'my_model_count')
grouped_mymodels = all_mymodels.group_by(&:category_id)
grouped_mymodels.map do|gmm|
  gmm[0...10]
end

问题是查询返回了所有 MyModel 行;现在,有8000多行。

是否有任何方法(在 Rails 或 mySQL 中)可以限制每组 10 行?

问候

4

1 回答 1

0

我不认为您正在寻找一个简单的单一查询解决方案,但根据您的数据大小和您对域的预先了解,有几个选项。

首先,您可以使用 find_each 代替它仍然会遍历您的完整集,但它会避免将所有 8000 加载到内存中。看起来像这样:

grouped_mymodels = {}
all_mymodels = MyModel.find_each do |model|
  grouped_models[model.category_id] ||= []
  next if grouped_models[model.category_id] > 10
  grouped_models[model.category_id] << model
end

否则,我认为您需要运行多个查找操作才能获得每个类别的前十名记录。

如果您只需要模型中的一些数据,您可以查看使用 GROUP_CONCAT 或其他东西来为您汇总。

于 2013-06-07T00:48:31.627 回答