给定一个模型,如下所示:
Contact (id, user_id, xxx, xxxxxxx)
我想有一个查询来输出联系人模型中唯一user_id记录的 #?关于如何写这个有什么想法吗?
谢谢
在SQL中有几种方法可以做到这一点,但是如果您想尝试尽可能多地保持在ActiveRecord提供的ORM中,我认为以下是您将获得的最接近的方法:
@user_ids = Contact.select('DISTINCT user_id').all
然后,@user_ids
将从联系人表中的记录引用的所有用户 ID 的数组。如果你想知道有多少,你可以打电话给@user_ids.count
。
更新:另一种方法可以提供更多信息,而无需实例化每个对象并避免编写 SQL 的开销,如下所示:
Contact.group('user_id').count #=> { 1 => 3, 2 => 4, 3 => 10 }
如您所见,响应是一个哈希值,其中用户 ID 作为键,每个用户的数量作为值。您可以使用其他.count
获取唯一用户 ID 的数量:
Contact.group('user_id').count.count #=> 3
以下是一些替代方法:
Contact.count('user_id', :distinct => true)
# SELECT COUNT(DISTINCT "contacts"."user_id") FROM "contacts"
Contact.count('DISTINCT user_id')
# SELECT COUNT(DISTINCT user_id) FROM "contacts"