簡體   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