2013-10-02 36 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。 –

相关问题