2012-02-14 53 views

回答

0

不知道是否有這樣做的一個簡單的方法,但這應該工作:

User.joins(:tasks).select("users.*, count(*) as task_count").having("task_count < 5").group(:id) 

編輯:以上只返回至少有一個相關的任務,用戶的實例。

你想要的是:

User.joins("LEFT JOIN tasks ON tasks.user_id = users.id").select("users.*, IFNULL(count(tasks.id), 0) AS task_count").having("task_count < 5").group(:id) 

但更好的解決方案可能是隻是一個counter_cache添加到您的用戶模型。

+0

我不能肯定,但我不認爲這是工作。它給了我一個我相當肯定不能正確的數字。我們有大約1萬個用戶,當我改變這個方式來找到少於100個任務的用戶時......它告訴我大約有2000個用戶。但是,每個用戶的平均任務數是2.2 ...那麼這怎麼可能是正確的呢?編輯:然後當我做超過100個任務的用戶時,它說82 ...總共比我們的10,000個用戶基數少很多。 – 2012-02-14 18:24:12

+0

對不起。我編輯了我的答案,以更好地解決您的問題。 – 2012-02-14 20:00:20

0

我不知道,如果這個工程預1.9.2但:

User.where(Task.count > 5).count 
+0

我在1.8.7,這沒有奏效。給我:錯誤的參數數量(0代表1) – 2012-02-14 17:49:12

相關問題