在activerecord中按外键排序:没有连接?

时间:2015-04-21 04:37:00

标签: ruby-on-rails postgresql join activerecord

我想扩展这个问题。 order by foreign key in activerecord

我试图根据一个非常大的表中的值来订购一组记录。 当我使用join时,它会带来所有"其他"将数据记录到对象中..因为连接应该..

#table users  30+ columns
#table bids  5 columns
record = Bid.find(:all,:joins=>:users, :order=>'users.ranking DESC' ).first

现在记录包含35个字段..

如果没有加入,有没有办法做到这一点?

这是我的想法..
通过连接,我得到了这个查询

SELECT * FROM "bids" 
left join users on runner_id = users.id  
ORDER BY ranking LIMIT 1

现在我可以为代码添加一个选择,这样我就无法获得完整的用户表,但是在范围内选择一个是危险的恕我直言。

当我手动编写sql时。

SELECT * FROM bids 
order by (select users.ranking from users where users.id = runner_id) DESC
limit 1

我相信这是一个更快的查询,基于"解释"这似乎更简单 比速度更重要的是第二种方法没有30个额外的字段 如果我在范围内构建自定义选择,如果它们也有自定义选择(可能只有一个),它可能会爆炸对象的其他搜索

1 个答案:

答案 0 :(得分:1)

您希望在积极的记录撰写中实现的目标

SELECT b.* from bids b inner join users u on u.id=b.user_id order by u.ranking desc

在活动记录中,我会写如下: Bids.joins("inner join users u on bids.user_id=u.id").order("u.ranking desc")

我认为它是唯一一个在不从用户模型中获取所有属性的情况下进行连接的。