我的用例很简单。这是我的模特。
Auction
===============
id
name
expiration_date
AuctionImage
===============
id
auction_id
image_path
filesize
我希望得到至少有Auctions
的所有AuctionImage
,并按expiration_date
排序。
class Auction < ActiveRecord::Base
has_many :auction_images
end
class AuctionImage < ActiveRecord::Base
belongs_to :auction
end
有什么建议吗?
答案 0 :(得分:1)
Auctions.joins(:auction_images).group(:id).order(:expiration_date)
答案 1 :(得分:0)
最快的SQL方法很可能是与EXISTS相关的子查询,其中性能与找到的子记录数无关。
要在Rails中实现这一点,您需要执行以下操作:
Auction.where("exists (select null from auction_images where aution_images.auction_id = auctions.id)").order("auctions.expiration_date desc")
如果你只是期望每次拍卖的图片非常少,那么基于外部联接的方法就可以了,但是对于group by或distinct的需求可能会导致从查询返回第一行的延迟,并且增加数据库服务器上的内存消耗。
因为expiration_date命令会使事情变慢,除非优化者发现了一个有益的索引。