2014-12-17 2 views
0

저는 MobileApp 모델을 가지고 있으며 을 사용하여 여러 개의 INNER JOIN으로 복잡한 SQL 쿼리를 수행합니다. SQL 쿼리는 다음과 같습니다.find_by_sql이있는 ActiveRecord : 조인 된 테이블의 필드로 정렬

SELECT DISTINCT mobile_apps.*, satisfaction_scores.id, satisfaction_scores.score FROM mobile_apps 
    INNER JOIN bucket_applications ON mobile_apps.id = bucket_applications.mobile_app_id 
    INNER JOIN satisfaction_scores ON mobile_apps.id = satisfaction_scores.mobile_app_id 
    WHERE NOT EXISTS 
     (SELECT * FROM feeds 
     WHERE feeds.mobile_app_id = mobile_apps.id 
     AND feeds.target_id = 41 
     AND feeds.left IS TRUE) ORDER BY satisfaction_scores.score DESC; 

그리고 저는 MobileApp.find_by_sql(<the_query>)입니다.

제 문제는 MobileAppSatisfactionScore으로 정렬해야한다는 것입니다. 결과적으로 SELECT 필드에 score을 추가하여 ORDER BY의 점수를 처리해야합니다. SQL 쿼리가 올바르다 고 생각하지만 ActiveRecord는 mobile_apps 테이블의 SELECT 열이 아니기 때문에 MobileApp의 잘못된 ID를 반환합니다.

MobileApp.find_by_sql(<the_query>) => 
[#<MobileApp id: 41>, 
#<MobileApp id: 42>, 
#<MobileApp id: 43>, 
#<MobileApp id: 44>] 

그러나

MobileApp.ids => [153, 156, 159, 162, 165] 

그것을 할 수있는 더 좋은 방법이 있나요?

감사합니다.

답변

0

SELECT에서 satisfaction_scores.id을 제거하면 find_by_sql에 의해 반환되는 MobileApp ID가 정확합니다. 쿼리 열에는 satisfaction_scores.id 열이 필요하지 않았습니다.

관련 문제