2017-04-04 28 views
0

我获取数据从专有数据库(Sybase优势ADS) 通过自写的API,利用PHP和返回结果为JSON红宝石SQL结果以分组哈希

,所以我有一个结果,看起来像这样

[ 
    {"year"=>"2016", "month"=>"1", "total"=>"1223"}, 
    {"year"=>"2016", "month"=>"2", "total"=>"613"}, 
    {"year"=>"2016", "month"=>"3", "total"=>"12351"}, 
    {"year"=>"2017", "month"=>"1", "total"=>"123123"}, 
    {"year"=>"2017", "month"=>"2", "total"=>"613123"}, 
    {"year"=>"2017", "month"=>"3", "total"=>"123"} 
] 

这是我检索红宝石,现在为了与时间工作,我想创建这样一个哈希:

[ 
    {:name => "2017", :data => {"1" => 123123, "2" => 613123, "3" => 123}}, 
    {:name => "2016", :data => {"1" => 1223, "2" => 613, "3" => 12351}} 
] 

这大排序是按年份键拆分和合并,每个月份和总数的组合。

而且我希望利用作为总钥匙一个月的价值。

任何一点帮助让我开始将不胜感激。

回答

0

您将要开始了使用Ruby的#group_by方法,这将组通过一年的行,同里作为主键和匹配行的值的数组:

>> groups = result.group_by { |row| row['year'] } 
=> {"2016"=> 
    [{"year"=>"2016", "month"=>"1", "total"=>"1223"}, 
    {"year"=>"2016", "month"=>"2", "total"=>"613"}, 
    {"year"=>"2016", "month"=>"3", "total"=>"12351"}], 
"2017"=> 
    [{"year"=>"2017", "month"=>"1", "total"=>"123123"}, 
    {"year"=>"2017", "month"=>"2", "total"=>"613123"}, 
    {"year"=>"2017", "month"=>"3", "total"=>"123"}]} 

接下来,您将使用通过对结果调用#sort_by如果你想进行排序如图所示,可以完成行

>> grouped_rows = groups.map { |year, values| {name: year, data: values.map { |value| [value['month'], value['total']] }.to_h} } 
=> [{:name=>"2016", :data=>{"1"=>"1223", "2"=>"613", "3"=>"12351"}}, 
{:name=>"2017", :data=>{"1"=>"123123", "2"=>"613123", "3"=>"123"}}] 

来转换数据