2016-11-02 6 views
0

Ver 14.14 Distrib 5.1.73アクティブレコード(MYSQL) -

activerecord (4.1.14)

複数の列からの個別のIDを選択して、私は貸し手と借り手に属し貿易モデルを持っています。私は、1つの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]と後の正常化)

しかし:私は、SQLクエリの後&ユニーク-IFY配列をフラット化作品以下のクエリが、唯一のため私は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]] 

私はJUSTユニーク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

感謝を見えるかもしれません。私は同様のSOの投稿(http://stackoverflow.com/questions/12188027/mysql-select-distinct-multiple-columns?rq=1)のためにGROUP BYを使用していました....私は何でもうまくいきます!あなたのクエリは、lender_idとborrower_idの一意の_combinations_を含むネストされた配列の戻り値を返します(例えば、[[1、2]、[1,3]])...私はフラットな配列としてユニークなIDを必要とします(例えば、[1,2,3])。 – daino3

+0

私はアプリでこの種の処理を行います。 – Strawberry

+0

LOL、これは私がやっていること( 'flatten.uniq')ですが、私はSQL/ActiveRecordを使ってこれをどうやって行うことができるのかを知りたいと思います。かなり関連性の高い/頻繁な使用例のようです。 – daino3

関連する問題