2013-10-02 80 views
1

我正在嘗試查找具有has_many關係的一個(或多個)實例的用戶數的最佳方法。查找具有多個關聯中的一個的用戶數

例如,用戶has_many :bank_accounts:credit_accounts(和一些其他關係)。我想查找具有至少一個bank_account和至少一個credit_account的唯一用戶的數量,並理想地在一個範圍內實現此操作,以便我可以在其上運行查詢。

目前我使用下面的代碼實現它(很差): (BankAccount.select(:user_id).uniq + CreditAccount.select(:user_id) + ...).uniq.count

我周圍很多玩一些連接,但是我沒有得到任何結果。例如,我玩過很多不同形式的User.joins(:bank_accounts, :credit_accounts).uniq('users.id').count,但我似乎沒有得到任何結果。

任何幫助將不勝感激,謝謝!

回答

0

如果你使用正常的sql很好。您可以使用下面的查詢

select distinct(user_id) from 
(select user_id from bank_accounts union select user_id from credit_accounts) a; 

我不知道是否存在這種軌道方式。

0

在這種情況下,我們需要的是具有credit_accounts和bank_accounts的用戶的INNER JOIN

User.joins(:credit_accounts, :bank_accounts).uniq.count 

以上查詢適用於我。由這個查詢生成的SQL是低於

"SELECT DISTINCT COUNT(DISTINCT `users`.`id`) FROM `users`.* FROM `users` INNER JOIN `credit_accounts` ON `credit_accounts`.`user_id` = `users`.`id` INNER JOIN `bank_accounts` ON `bank_accounts`.`user_id` = `users`.`id`" 
+0

我玩了很多像你提到的一個查詢,但從來沒有得到它的工作。 (User.joins(:credit_accounts).uniq.count)返回0. User.joins .count'返回0,儘管有一個CreditAccount。 –

相關問題