2011-05-04 55 views
1

我已經完成了兩個表的簡單Rails查找,但是現在發現使用4表查詢我沒有取得很好的進展。所有表與鍵連接,並且基本上都是:Rails中的多表查詢

  • 用戶(有很多)
  • 電話(有很多)
  • 廣告活動(有很多)
  • 呼叫

我只是想統計特定用戶的總呼叫次數以及特定活動的總呼叫次數。我還可以將用戶ID添加到Campaigns和Calls,但由於某種原因,我認爲這是作弊或一個壞主意。我只是不知道。

回答

1

的Rails 3:

呼叫總數特定用戶具有:

@user.phones.joins(:campaigns => :calls).count 

特定活動的呼叫總數:

@user.phones.joins(:campaigns => :calls).where('campaigns.id' => @campaign.id).count 
+0

謝謝,試過了,噢,很高興看到它的工作。 – rtfminc 2011-05-05 14:38:51

0

假設一個手機屬於用戶,以及宣傳屬於電話:

# total calls for a specific campaign 
campaign_call_count = Campaign.find(id).calls.count 
# or a report for all campaings 
Campaign.all.map{|c| "#{c.name}: #{c.calls.count}" 

#total calls a user has 
user_phone_ids = user.phones.map(&:id) 
user_calls_by_campaign = Campaign.where(:phone_id=>user_phone_ids).map{|campaign| "#{user.name} calls for #{campaign.name}: #{campaign.calls.count}" } 
puts user_calls_by_campaign 

這應該給你一個列表

+0

不知道什麼「和」是的,所以當事情解決了一點,我會去找出這個新的對我的事情。感謝您的回覆,希望我可以選擇頂級答案! – rtfminc 2011-05-05 14:40:10

+0

map(&:id)是map {| user | user.id} – 2011-05-05 15:40:49