繁体   English   中英

与 ActiveRecord 的 has_many 关系中的不同查询

[英]Distinct query in has_many relationship with ActiveRecord

在找出处理此类查询的最有效方法时遇到了麻烦。

我有 3 个模型:

User , LocationQuery

# User
has_many :queries

# Query
belongs_to: :user
belongs_to :location

我将user.queries用于统计信息,因为它包含额外的元数据,如果它们碰巧执行相同的查询,则location_id列上有很多重复项,但每个都有不同的元数据,因此它被记录为单独的记录。

我想构建一个所谓的history ,它从User.queries中选择最近的不同location_id并按idcreated_at的顺序返回它们,同时仍将其保留为 ActiveRecord 集合,而不是将其转换为数组以便它可以迭代进行渲染。

user.queries.select(:location_id).distinct很接近,但没有排序。

以下原始 SQL 似乎正在工作,但有没有办法用 ActiveRecord 编写它

queries.find_by_sql("
      SELECT location_id, created_at
      FROM (SELECT DISTINCT ON (queries.location_id) *
        FROM queries
        ORDER BY queries.location_id, queries.created_at DESC) queries
      ORDER BY queries.created_at DESC
      LIMIT 20
    ")

uniq会尽可能接近

user.queries.order('queries.created_at DESC').pluck(:location_id).uniq
user.queries.select("location_id, queries.created_at").map(&:location_id).uniq

暂无
暂无

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

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