前提・実現したいこと
rubyで取得したhash値を異なる形のhash値に書き換えたいです。
発生している問題
drinks というテーブルには以下のようにデータが格納されています
table
1id|name| 21|ミックスジュース| 32|トマトジュース| 43|お茶| 54|麦茶| 6. 7.
drink_prices というテーブルには以下のようなデータが格納されています。
同じstore_code 内で drink_id が同じで、 drink_price だけが違うものがあります。
これは、同じミックスジュースでもサイズが違うなどの理由で同じ drink_id の drink_price だけ違う物がデータとして入っています。
table
1id|store_code|drink_id|drink_price 21 |a |1 |520 32 |a |1 |550 43 |a |2 |500 54 |a |3 |480 65 |a |4 |500 76 |b |1 |550 87 |b |2 |500 98 |b |3 |500 10. 11.
drinks と drink_prices テーブルを内部結合し、必要なデータのみ抽出します。
sql
1select store_code, name from drink_prices INNER JOIN drinks ON drink_prices.drink_id = drinks.id where drink_prices.id in(select min(drink_prices.id) from drink_prices INNER JOIN drinks ON drink_prices.drink_id = drinks.id group by store_code, drinks.name);
上記のSQL文を挟む理由としては、 drink_prices テーブルには同じ名前の値段だけ違う値が入っています。
drinks の name を表示するにあたって、同じ名前を2度出力することを避けるために、一度 1d が若い方を省いて取得しています。
上記のsql文で取得できたデータは以下のようなものになります。
hash
1[ 2{"store_code"=>"a", "name"=>"ミックスジュース"}, 3{"store_code"=>"a", "name"=>"トマトジュース"}, 4{"store_code"=>"a", "name"=>"お茶"}, 5 {"store_code"=>"a", "name"=>"麦茶"}, 6{"store_code"=>"b", "name"=>"ミックスジュース"}, 7 {"store_code"=>"b", "name"=>"トマトジュース"}, 8 {"store_code"=>"b", "name"=>"お茶"}, 9. 10. 11. 12]
このようなhash値が取得できます。
これを以下のようなhash値に変換したいと考えています。
hsah
1[ 2{"store_code"=>"a", "name"=>["ミックスジュース", "トマトジュース", "お茶", "麦茶"]}, 3{"store_code"=>"b", "name"=>["ミックスジュース", "トマトジュース", "お茶"]}, 4. 5. 6. 7]
store_codeごとにnameの値がまとめられている状態にしたいです。
tableから取得するとき、取得した後rubyで書き換える、どちらの方法でやるのがベストなのかもわからないです....
補足情報(FW/ツールのバージョンなど)
Rails 6.0.3.4
ruby 2.6.5
sqLite3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/25 09:11
2020/10/25 09:14