繁体   English   中英

如何使用RAILS 2.3.x的一个查询将activerecord数据集拆分为两半?

[英]How to breakup an activerecord dataset into two halves using one query with RAILS 2.3.x?

数据集看起来像这样(模型WF具有id,widget_id,feature_id,状态为字段)

id widget_id feature_id status


1 1 23 1

2 1 45 1

3 1 89 1

4 2 41 1

5 1 10 0

6 1 90 0

7 1 83 0

8 2 45 1

什么可能是我的activerecord查询,它允许我写一个语句和结果组自己这样的东西(根据状态过滤)

a,b = [23,45,89,41,45] [10,90,83]

如果只想使用一个SQL查询执行此操作,请使用group_by

all_grouped = WF.all(:select => 'feature_id, status').group_by(&:status)

这将返回一个带有两个键/值对的OrderedHash(假设状态为0或1)。 每对的密钥将是状态,值将是具有该状态的WF实例的数组。

您可以使用任何Enumerable方法(如sort,sort_by,map等)进一步操作返回的OrderedHash

要获得您想要的输出,b,您需要添加以下行:

a = all_grouped.select{ |k, v| k == 1 }[0].last.map(&:feature_id) # select WFs with status == 1 and keep only the feature attribute
b = all_grouped.select{ |k, v| k == 0 }[1].last.map(&:feature_id) # same with status == 0

这与优雅相差甚远,但是要满足您的要求,您可以执行以下操作:

#model
class WF < ActiveRecord::Base

   def self.id_group_on_status
      a = WF.find_all_by_status(1).map(&:id)
      b = WF.find_all_by_status(0).map(&:id)
      a,b
   end
end

#somewhere else
a,b = WF.id_group_on_status

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM