0

我的用例很简单。这是我的模型。

Auction
===============
id
name
expiration_date

AuctionImage
===============
id
auction_id
image_path
filesize

我想得到所有Auctions至少有 1AuctionImage的东西,然后按expiration_date.

class Auction < ActiveRecord::Base
  has_many :auction_images
end

class AuctionImage < ActiveRecord::Base
  belongs_to :auction
end

有什么建议么?

4

2 回答 2

1
Auctions.joins(:auction_images).group(:id).order(:expiration_date)
于 2013-08-11T02:57:57.197 回答
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 订单无论如何都会减慢速度,除非优化器找到一个有益的索引。

于 2013-08-12T17:27:44.420 回答