我有一个这样的模型(Rails 2)
MyModel :
- id
- category_id
- value
- my_model_count
我希望获得10个第一个mymodel,按类别分组。
可以:
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行进行此限制?
此致
答案 0 :(得分:0)
我认为没有一个简单的单一查询解决方案可以满足您的需求,但根据您的数据大小以及您对该领域的了解,有几个选项。
首先,您可以使用find_each代替仍然会遍历整个集合的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或其他东西来为你推送它。