首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将所有活动记录对象按一个属性筛选为唯一。

将所有活动记录对象按一个属性筛选为唯一。
EN

Stack Overflow用户
提问于 2016-01-19 15:45:30
回答 2查看 1.6K关注 0票数 4

是否可以通过一个或多个列查询模型对象并筛选结果以确保唯一性?

我应该限定这一点,采取第一个独特的记录,而忽略其余的是好的。

我通常的方法是查询对象和拔出uniq ids或其他什么,然后运行另一个查询。

假设我有一个这样的场景:

测试id: 24997,test_id: 7,group_id: 5408 测试id: 25001,test_id: 7,group_id: 5412, 测试编号: 25002,test_id: 8,group_id: 5413, 测试编号: 25004,test_id: 8,group_id: 5415, 测试编号: 25007,test_id: 9,group_id: 5417, 测试id: 25008,test_id: 9,group_id: 5299

我希望有这样的结果。test_id列的惟一性:

测试id: 24997,test_id: 7,group_id: 5408 测试编号: 25002,test_id: 8,group_id: 5413, 测试编号: 25007,test_id: 9,group_id: 5417

我想是为了完整。假设这是一个具有多列的直通表。如何通过两列或更多列获得唯一的记录?

EN

回答 2

Stack Overflow用户

发布于 2016-01-19 16:45:05

您可以在id上使用最小值

代码语言:javascript
代码运行次数:0
运行
复制
Test.group(:test_id).minimum(:id)

它们将返回带有组键和id值的散列,您可以将其传递给作用域上的where条件:

代码语言:javascript
代码运行次数:0
运行
复制
Test.where(id: (Test.group(:test_id).minimum(:id).values))
票数 5
EN

Stack Overflow用户

发布于 2016-01-19 16:25:23

是。可以使用不同的根据列上的唯一性筛选结果。

假设您有一个带有Post列的title模型,并且您必须按标题获得唯一的记录,那么就可以这样做了。

代码语言:javascript
代码运行次数:0
运行
复制
Post.select('DISTINCT title')

编辑:上面的查询将只返回title列,但是如果您想要所有的列,则必须循环并过滤。基本上,如果您对一列执行唯一性,并且存在重复项,则无法决定保留哪一列和丢弃哪一列。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34881017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档