2016-11-02 57 views
0

Ver 14.14 Distrib 5.1.73活動記錄(MYSQL) - 從多個列

activerecord (4.1.14)

我有屬於貸款人和借款人交易模型選擇不同的ID。我想在一個SQL查詢中找到機構交易的所有uniq交易對手。以下作品中的查詢,但只是因爲我壓扁&獨特-IFY的SQL查詢後的數組:

Trade.where("borrower_id = :id OR lender_id = :id", id: institution.id).uniq.pluck(:lender_id, :borrower_id).flatten.uniq 

(我知道這包括機構本身的,所以我們用[1,2,3,4] - [1]後恢復正常)

但什麼我想要做的是使用Group By子句或其他東西,以便我的SQL查詢處理flatten.uniq部分。

下面不起作用,因爲它返回的獨特組合lender_idborrower_id一個嵌套的數組:

Trade.where("borrower_id = :id OR lender_id = :id", id: institution.id).group(:lender_id, :borrower_id).uniq.pluck(:lender_id, :borrower_id) 

=> [[1,2], [1,3], [2,3]] 

我只想唯一ID的平面陣列:[1,2,3]

任何想法?謝謝!

回答

0

我不明白你想要什麼,或者你爲什麼想在沒有任何聚合函數的情況下包含GROUP BY子句。

FWIW,有效的查詢可能是這樣的......

SELECT DISTINCT t.lender_id 
       , t.borrower_id 
      FROM trades t 
      WHERE 28 IN(t.borrower_id,t.lender_id); 
+0

感謝回答。我正在使用一個GROUP BY,因爲類似的SO帖子(http://stackoverflow.com/questions/12188027/mysql-select-distinct-multiple-columns?rq=1)....我開放給任何作品!話雖如此,你的查詢會產生一個嵌套數組返回集,其中包含lender_id和borrower_id的唯一_combinations_(例如[[1,2],[1,3]])...我只需要唯一的ID作爲平面數組(例如[1,2,3])。 – daino3

+0

我會在應用程序中進行那種處理。 – Strawberry

+0

大聲笑,這就是我正在做的('flatten.uniq'),但我想了解如何通過SQL/ActiveRecord來做到這一點(因此問題)。似乎是一個非常相關/頻繁的使用案例。 – daino3