Rails 4查询由单个属性唯一

god*_*yan 20 postgresql activerecord ruby-on-rails arel

所以这不仅仅是一个问题,而是我想要做的事情.

我有三个对象,叫做Items

<Item id: 1, name: 'Book'>
<Item id: 2, name: 'Car'>
<Item id: 3, name: 'Book'>
Run Code Online (Sandbox Code Playgroud)

我想做一个只返回每个唯一"名称"属性之一的查询.

就像是 Item.select('distinct(name), items.*')

这不起作用,它仍然返回所有三个项目.

如何形成此查询以便它只返回:

<Item id: 1, name: 'Book'>
<Item id: 2, name: 'Car'>
Run Code Online (Sandbox Code Playgroud)

Ban*_*eil 30

如果您想要恢复整个模型,但仍保持唯一性,可以使用:

Item.select('distinct on (name) *')
Run Code Online (Sandbox Code Playgroud)

我只用Postgres数据库对它进行了测试.它可能适用于也可能不适用于mysql.

  • 上面的答案将返回所有列,如果你想只选择一些列,你可以尝试`Item.select('distinct on(name)name,id')` (2认同)
  • 任何人都知道如何使用 mysql 实现这一目标? (2认同)

vee*_*vee 11

请试试这个:

Item.select('distinct name')
Run Code Online (Sandbox Code Playgroud)

  • 那种作品.它只返回带有'name'属性的对象.我想要返回整个对象.我明白了:<Item id:nil,name:'Book'>,<Item id:nil,name:'Car'> (5认同)