繁体   English   中英

根据相关记录数选择记录

[英]Select records based off of an associated records count

我有三种模式:

class Picture < ActiveRecord::Base
  # fields: url

  has_one :visit
end

class Visit < ActiveRecord::Base
  # fields: total_visits
  belongs_to :picture
end

class VisitDetail < ActiveRecord::Base
  #fields: ip_address
  has_many :visits
end

我想编写一个查询,以根据时间范围选择所有具有最多视图的图片。 例如,我想检索上周所有观看次数最多的图片。 当前,我将遍历在上周,一个月等中创建的所有VisitDetail记录,然后汇总每个VisitDetailVisit记录。

hash = { }

VisitDetail.where("created_at >= ?").each do |record|
  if record.visit
     if hash.key? record.visit.picture_id
       hash[record.visit.picture_id] += 1
     else
       hash[record.visit.picture_id] = 1
     end
  end
end

# With my hash, I then order the hash appropriately and query
# for the pictures based on the key values in the hash which
# represent individual picture ids.

我的问题是,有没有更有效的方法来做到这一点? 有没有我可以写的查询,在数据库上不会如此详尽?

您可以在表之间使用joins ,并有条件地通过visit_details表上的created_at字段进行选择。 然后,您将获得查询返回的数组的大小:

Picture.joins(:visit => :visit_details).where('visit_details.created_at > ?', some_date)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM