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 个不同的数组中获取所有结果。我基本上想将结果分成 2 个数组,第一个具有 platform_type = TOTAL 和其他所有内容。

4

2 回答 2

2

同样,在不了解您为什么要这样做的情况下,我会这样使用Enumerable#partition

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

请注意,IIRC,SQLLIKE 'TOTAL'与 Ruby 的不同"string" =~ /TOTAL/(这更像是SQL——LIKE '%TOTAL%'我不确定你需要什么)。

于 2013-04-05T02:50:01.483 回答
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

于 2013-04-04T23:22:03.393 回答