是否可以查询模型对象并按一列或多列过滤结果以获得唯一性?
我应该对此进行限定,取得第一个独特记录并忽略其余记录。
我通常的方法是查询对象并拔出uniq id或其他任何内容并运行另一个查询。
假设我有这样的一套:
测试ID:24997,test_id:7,group_id:5408,
测试ID:25001,test_id:7,group_id:5412,
测试ID:25002,test_id:8,group_id:5413,
测试ID:25004,test_id:8,group_id:5415,
测试ID: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,
测试ID:25002,test_id:8,group_id:5413,
测试ID:25007,test_id:9,group_id:5417
我想完整性。让我们说这是一个包含多列的直通表。我怎样才能通过两列或更多列获得唯一记录?
答案 0 :(得分:4)
您可以在ID:
上使用minimumTest.group(:test_id).minimum(:id)
这些将返回带有组键和id值的哈希值,您可以将其传递给范围上的where条件:
Test.where(id: (Test.group(:test_id).minimum(:id).values))
答案 1 :(得分:1)
是。您可以使用distinct基于列的唯一性过滤结果。
考虑一下Post
模型带有title
列,您必须按标题获取唯一记录,然后才能执行
Post.select('DISTINCT title')
编辑:上面的查询只会返回标题列,但如果你想要所有列,你必须循环并过滤。基本上如果你在一列上执行唯一性并且有重复,它就无法决定保留哪一个以及丢弃哪一个。