2011-01-22 10 views
3

なく、それらを組み合わせた2つのクエリ:Railsの - のような2つのクエリを考えるSCOPES

@users1 = Users.find_by_company_id(2) 
@users2 = Users.find_by_office_id(2) 

私は2つの組み合わせたい:

@users_to_show = @users1 + @users2 

問題が表示さから重複ユーザーを防ぐためにどのようにする方法です。 2つを組み合わせる方法はありますか(アレイ?)そして重複したレコードが削除されていることを確認しますか?

おかげ

更新日:

# This QUERY gives all of a user's project members, people they work with 
@project_ids = @projects.map(&:project_id) 

@users = User.find_by_sql [ 
          "SELECT DISTINCT users.* 
          FROM users 
           INNER JOIN permissions ON permissions.user_id = users.id 
          WHERE project_id IN (?) AND permissions.user_id != ? 
          UNION ALL 
          SELECT DISTINCT users.* 
          FROM users 
          WHERE instance_id = ?", 
          @project_ids, current_user.id, current_user.instance_id 
          ] 
+0

なぜスコープを使用して余分なデータベースクエリを保存しないのですか? –

+0

私はスコープを使わないように言われました。クエリもかなり複雑です。 – AnApprentice

+0

@Tim、ちょうど2つのクエリを追加しました。どう思いますか? – AnApprentice

答えて

2

をこれはあなたのために働くかもしれマニュアルSQLのアプローチです:

@users = User.find_by_sql(" 
    SELECT DISTINCT * FROM USERS WHERE [Place your First complicated where clauses Here] 
    UNION 
    SELECT * FROM USERS WHERE instance_id = ? 
", current_user.instance_id) 

EDIT: UNIONは間の重複レコードをelimateます2つのクエリ

EDIT:それぞれのクエリが独立して重複を生成しないように注意してください。ユニオンは単一のクエリ内で重複を削除しません。

+0

私はあなたの特定のシナリオで動作するように編集しようとしています... –

+0

おかげでティム、私はそれがうまくいったと思いますが、私はそれが重複したユーザレコードを返すことができるかどうかはまだ分かりません...同じユーザが両方そのユーザーが2回表示されるのを防ぐ必要があります。 – AnApprentice

+1

OppsはUNIONだけで試してみます。私は私の答えを編集しました。 –

関連する問題