2017-12-19 19 views
-2

사용자 모음을 반환하고 2 개의 다른 쿼리 결과를 결합하고자합니다.절의 응답을 연결하는 방법 2 절?

나는 현재 이것을 가지고 있지만 정확한 결과

def get_abc() 
    users = User.where("....") 
    users << User.where("...") 
    users 
end 

이 2 개 개의 다른 쿼리의 결과를 결합하는 올바른 방법인가

가 표시되지 않는 건가요?

first_names = User.where(:first_name => 'Tobias') # ActiveRecord::Relation 
last_names = User.where(:last_name => 'Fünke') # ActiveRecord::Relation 

당신이 사용 병합 사용하여 AND (교차) 결합하려는 경우 :

+0

어떤 조건을 기반으로합니까? 유니크 레코드가 필요합니까? 그것은 일종의 필터와 관련이 있습니까? 나는 이것 각각이 질의의 다른 측면을 가질 것이기 때문에 이것을 묻는다. – Manishh

+0

'User << User.where ("...")'로하면 중복 레코드를 줄 수도있다. 여기에서'| ='를 사용하는 것이 더 좋습니다. –

+0

"올바른 결과가 보이지 않습니다"- 질문이 명확하지 않습니다. 올바른 결과를 얻지 못했고 두 쿼리를 함께 결합하려고합니다. 먼저 올바른 결과를 반환하도록 코드를 수정해야합니다. –

답변

2

다음, 당신의 두 개의 질의가이처럼 가정 수 있습니다

first_names.merge(last_names) 

사용 결합하려는 경우 또는 (ActiveRecord 5+ 또는 4.2 또는 어디서나 또는 백 포트에서 사용 가능) :

first_names.or(last_names) 
0

관련이 있다면 필터의 일종으로 중복 된 데이터를 가지므로이 접근법을 사용하면 안됩니다. 다음 최악의 상황은 사용자 데이터를 가져 오기 위해 여러 쿼리를 실행하는 것입니다. 이 작업을 수행하는 대신 다른 접근법을 사용할 수 있습니다. 쿼리 문자열

condition = "first_name = :first_name " 
attributes = { first_name: 'xyz'} 
condition = " And/Or last_name = :lastname" if your_other_condition? 
attributes[:lastname] = 'abc' 
users = User.where(condition, attributes) 

범위의 도움으로 할 수있는 다른 방법으로 은

users = User.where("...") 
users = users.scope1 if any condition 

이 마지막으로 쿼리를 사용하고 당신이 원하는 데이터를 반환합니다 (난 당신이 데이터를 필터링한다고 가정).

+1

그는 첫 번째 쿼리의 결과를 필터링하지 않습니다. 대신 두 번째 쿼리의 결과를 첫 번째 쿼리에 추가합니다. –