2016-02-15 21 views
1

比方說,我有一個Campaign模型has_many :questions導軌檢查兒童模型的數量

我想獲取所有包含3個以上問題的廣告系列。所以我想要做這樣的事情:Campaign.where("questions.length > 3")

有沒有辦法做這個查詢?

回答

1

對於更多的ActiveRecord尋找查詢發現活動有超過3個問題,你可以試試這個

Campaign.joins(:questions).group('campaigns.id').having('count(campaign_id) > 3') 
1

查詢將是:

Campaign.where("id IN (SELECT compaign_id 
         FROM questions 
         GROUP BY compaign_id 
         HAVING COUNT(*) > 3") 
+0

你知道,如果這個查詢比Miles的答案更有效率? –

+0

這很有趣,我的查詢效率更高,因爲'HAVING'首先過濾結果,它減少了'Compaign'的序列掃描,與'JOIN'先比較,然後過濾。我們可以使用'rails db',然後運行'explain your_query'命令進行比較。順便說一下,你可以在'rails console'中運行查詢來檢查運行時間。 –

+0

棒極了!感謝幫助! –