[英]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.