如何查询 many_to_many 与 Sequel gem 和 Postgres 的关联

How to query many_to_many associations with Sequel gem and Postgres

我正在使用 Sequel gem 连接到我的 Postgres 数据库 - 我有播放列表和曲目,它们具有 many_to_many 关系。

我很难找到查询播放列表中出现频率最高的前 10 首曲目的最有效方法。谁能举例说明如何实现这一点?

可能最好使用模型进行连接 table:

class PlaylistTrack < Sequel::Model(:playlists_tracks)
  many_to_one :playlist
  many_to_one :track

  def self.top10_tracks
    group_and_count(:track_id).
      reverse(:count).
      limit(10).
      eager(:track).
      all.
      map(&:track)
  end
end

请注意,这执行了两次查询,但它确保生成的曲目数组按受欢迎程度排序。

如果你愿意,你可以在没有连接的情况下在单个查询中完成 table 模型:

def Track.top10
  join(:playlists_tracks, :track_id=>:id).
    group{tracks[:id]}.
    select_all(:tracks).
    select_append{count(tracks[:id])}.
    order{count(tracks[:id]).desc}.
    limit(10).
    all
end

请注意,这使用了非标准 SQL,因为它会选择您不作为分组依据的非聚合表达式,但它在 PostgreSQL 中确实有效。通过按轨道 table.

中的所有列分组,您可以使用标准 SQL 进行这项工作