我有一个模型MobileApp,我使用find_by_sql
来执行带有多个INNER JOIN
的复杂SQL查询。 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
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 :(得分:0)
从satisfaction_scores.id
移除SELECT
后,MobileApp
返回的find_by_sql
ID是正确的。除了satisfaction_scores.id
列对查询不是必不可少的。