我从我的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个不同的数组中。我基本上想把结果拆分成2个数组,第一个数组有platform_type = TOTAL,另一个有其他数据。
答案 0 :(得分: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 :(得分:1)
要回答您的问题而不了解您为什么这样做:
使用额外的条件在一个查询中全部返回它们,然后您可以使用group_by将它们分组:
all_results = $connection.execute("SELECT *, platform_type LIKE 'TOTAL' as is_like_total FROM builds").
这会为您的每个结果提供一个' is_like_total' "柱"你可以分组了。
http://ruby-doc.org/core-2.0/Enumerable.html#method-i-group_by