查找具有多个关联之一的用户数

时间:2013-10-02 17:38:12

标签: ruby-on-rails activerecord

我正在尝试找到计算拥有一个(或多个)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玩弄了很多,但我似乎没有得到任何结果。

非常感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:0)

如果使用普通的sql就可以了。您可以使用以下查询

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

我不确定是否存在导轨方式。

答案 1 :(得分:0)

在这种情况下,我们需要的是INNER JOIN具有credit_accounts和bank_accounts的用户。

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`"
相关问题