我正在尝试找到计算拥有一个(或多个)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 :(得分: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`"