2013-04-04 74 views
0

陣列我從數據庫中獲取的一些數據,如下面我ruby文件:劈裂紅寶石

@main1= $connection.execute("SELECT * FROM builds 
       WHERE platform_type LIKE 'TOTAL';") 

@main2= $connection.execute("SELECT * FROM builds 
       WHERE platform_type NOT LIKE 'TOTAL';") 

這樣做後,我進行散列和這些結果一堆其他的東西。清楚的是,這不會像這樣返回一個數組,但它會返回一些mysql2類型的對象。所以,我只是把它映射到2個陣列是安全的:

@arr1 = Array.new 
@arr1 = @main1.map 

@arr2 = Array.new 
@arr2 = @main2.map 

有什麼辦法,以避免執行只是一個查詢執行2個不同的查詢,並獲得在2個不同陣列的所有結果。我基本上想把結果分成兩個數組,第一個是platform_type = TOTAL,另一個是另一個。

+2

你說你正在使用Rails,但你沒有使用ORM?任何特定的原因?你的'@arr = Array.new'調用也是多餘的。 – 2013-04-04 22:57:33

回答

2

還沒有進入你爲什麼這樣做,你在做什麼,我會用Enumerable#partition這樣:

rows = $connection.execute('SELECT * FROM builds') 
like_total, not_like_total = rows.partition { |row| 
    row['platform_type'] =~ /TOTAL/ 
} 

需要注意的是,IIRC,SQL LIKE 'TOTAL'是不一樣的作爲Ruby的"string" =~ /TOTAL/(這更像是SQL中的LIKE '%TOTAL%'-我不確定你需要什麼)。

1

要回答你的問題沒有進入,爲什麼你這樣做是這樣的:

返回他們都在一個查詢中,有額外的標準,那麼你可以將它們不過你想要與GR​​OUP_BY:

all_results = $connection.execute("SELECT *, platform_type LIKE 'TOTAL' as is_like_total FROM builds").

這會給你的每個結果一個'is_like_total'「列」,你可以group_by。

http://ruby-doc.org/core-2.0/Enumerable.html#method-i-group_by