###前提・実現したいこと
RailsとMySQL環境にて、グループ化された項目を作成順に30件ずつ取得したいです。
###状況
ParentモデルとChildモデルがあり、Parent has_many Child
Child belongs_to Parent
のリレーションが設定されています。
DB上では以下の通りです。
parentsテーブル
- id: int
- name: varchar
- created_at: datetime
childrenテーブル
- id: int
- parent_id: int
- name: varchar
- created_at: datettime
parentsごとに、n件のchildrenレコードを1回のクエリで取得したいと思っています。
###試したこと
クエリ発行が1回きりでなければ、以下の方法で行えるかと思いますが、見ればすぐ分かるように効率が悪すぎるため、サブクエリを使ってでも1回で取得できたらと思っています。
ruby
1children_with_parent = Parent.all.map do |parent| 2 Child.where(parent: parent).order(created_at: :desc).limit(30) 3end
当方DBに疎いもので、可能ならば遅いとされているGROUP BY句を使わずに実現したいと思っていますが、それが難しそうであれば使うのもやむを得ないと思っています。また、ActiveRecordだけではサブクエリ周りが難しいと思うのでArelや生のクエリもやむを得ないと思っています。
それではよろしくお願い致します。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/08 05:28
2017/09/08 05:31
2017/09/08 05:38
2017/09/08 06:09
2017/09/08 06:23
2017/09/08 06:42 編集
2017/09/08 07:01
2017/09/08 08:15 編集
2017/09/08 10:25