【问题标题】:Get list of unique column results from database从数据库中获取唯一列结果列表
【发布时间】:2013-05-06 19:32:54
【问题描述】:

我偶然发现了this answer,它帮助我生成了一个我想要的唯一值列表,但是,我不想要所有结果。有什么方法可以过滤select 中的结果或其他方式来完成此操作?

我在想一些类似的事情:

@results = MyModel.select("DISTINCT(columnForDistinction)", :myBoolean => false)

@results = MyModel.select("DISTINCT(columnForDistinction)", :someString => stringImLookingFor)

目前,我无法过滤查询的结果,因此我正在遍历返回的数组,只列出将该布尔值设置为 false 的结果,如下所示:

<% @results.each do |result| %>
  <% if !result.myBoolean %>
    #do stuff here
  <% end %>
<% end %>

<% @results.each do |result| %>
  <% if result.someString == stringImLookingFor %>
    #do stuff here
  <% end %>
<% end %>

有没有更好的方法来做到这一点?

【问题讨论】:

  • MyModel.select(:some_field).uniq 应该生成 =&gt; SELECT DISTINCT some_field FROM my_model
  • @Orlando 不会只返回那个字段吗?我想要每个字段,但只想要满足特定条件的结果。
  • @Orlando 那怎么能让我有额外的条件?

标签: ruby-on-rails activerecord filtering


【解决方案1】:

ActiveRecord 查询方法是可链接的。您可以调用多个,它会在您使用结果时将它们全部构建到查询中。对于条件,您将使用where。尝试类似:

@results = MyModel.select("DISTINCT(columnForDistinction)").where(:myBoolean => false)

【讨论】:

  • 是的。我刚刚了解了链接 ActiveRecord 查询,所以这就是我所需要的。链接是否多次访问数据库?
  • 不,selectwhere 之类的查询方法返回 ActiveRecord::Relation 对象。然后,当您调用像 eachinspect 这样需要实际结果的方法时,关系对象会使用所有链接的内容构建数据库查询并运行它。我还建议阅读有关范围的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多