2013-05-12 75 views
0

我偶然發現了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 %> 

d

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

有沒有更好的方法來做到這一點?

+0

'MyModel.select(:some_field).uniq'應該產生'=> SELECT DISTINCT some_field FROM my_model' – Orlando 2013-05-12 18:33:07

+0

@Orlando不會只返回我的那場?我想要每一個領域,但只有滿足一定條件的結果。 – RileyE 2013-05-12 18:57:16

+0

@奧蘭多如何讓我有一個額外的條件? – RileyE 2013-05-12 19:00:27

回答

1

ActiveRecord查詢方法是可鏈接的。你可以調用多個,當你使用結果時,它將把它們全部構建成一個查詢。對於條件,您將使用where。嘗試是這樣的:

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

是的。我剛剛瞭解到鏈接ActiveRecord查詢,所以這就是我所需要的。鏈接是否不止一次地觸發數據庫? – RileyE 2013-05-12 20:33:26

+0

不,像'select'和'where'這樣的查詢方法返回ActiveRecord :: Relation對象。然後,當你調用需要實際結果的'each'或'inspect'這樣的方法時,關係對象會用所有鏈接的東西構建DB查詢並運行它。我還建議閱讀關於示波器。 – mckeed 2013-05-12 20:49:18