2014-12-17 2 views
0

У меня есть модель MobileApp, и я использую find_by_sql для выполнения сложного SQL-запроса с несколькими INNER JOIN. Запрос SQL является следующее:ActiveRecord с find_by_sql: упорядочить по полю из объединенной таблицы

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>).

Моя проблема в том, что мне нужно отсортировать мой MobileApp по счету SatisfactionScore. Следовательно, мне нужно добавить в поле SELECT поле score, чтобы иметь ORDER BY, работающий со счетом. Я думаю, что SQL-запрос прав, но ActiveRecord не любит иметь в столбцах SELECT не из таблицы mobile_apps и поэтому возвращает неверные идентификаторы MobileApp.

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

Удаляя satisfaction_scores.id из SELECT, то MobileApp идентификаторы, возвращаемые find_by_sql являются правильными. Кроме того, для запроса не был необходим столбец satisfaction_scores.id.

Смежные вопросы