2011-11-02 11 views
1

に参加ネストした上で、カウントを含むどこに合流します可能な限りデータベースを作成しましたが、(潜在的に多くの)グループを介して連絡先がx人以上あるユーザーのリストを取得しようとしています。Railsは私が私のレールに3アプリを以下のモデルのセットアップを持っているテーブル

私はこれをruby/railsコードで問題なく実行できますが、大量のデータセットの場合はすべてをメモリにロードします。

x = 4 # or whatever 
User.all.select{ |u| u.groups.collect(&:contacts).flatten.uniq.size > x } 

私は次のようにしかし無駄に何かをして試してみた:連絡先を右にポイントのいずれかの種類

明瞭であるためには

User.joins(:groups => :contacts).where('count(contacts.id) > ?', x) 

また、それはいいだろうSQLは私の強みではないし、今日は脳死だそうだ。

答えて

8

ビットのためにこれで苦労した後、私はいくつかの助けを得ましたので、

User.select("users.*, count(distinct contacts.id) as num").joins(:groups => :contacts).group('users.id').having('num > 10') 
ように私のクエリを確定することができました
関連する問題