0
我使用Sequel gem連接到我的Postgres數據庫 - 我有播放列表和曲目,它們有許多關係。如何查詢many_to_many與Sequel gem和Postgres的關聯
我很難找到最有效的方式來查詢播放列表中最常見的10首曲目。有人能給我一個如何解決這個問題的例子嗎?
我使用Sequel gem連接到我的Postgres數據庫 - 我有播放列表和曲目,它們有許多關係。如何查詢many_to_many與Sequel gem和Postgres的關聯
我很難找到最有效的方式來查詢播放列表中最常見的10首曲目。有人能給我一個如何解決這個問題的例子嗎?
也許最好使用型號爲連接表:
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
要注意,這兩個查詢,但它可以確保所產生的軌跡的數組依熱門程度排序。
如果你願意,你可以做一個單一的查詢,而無需連接表型號:
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中起作用。您可以通過按軌道表中的所有列進行分組來使用標準SQL進行此項工作。
請顯示示例數據,'order by ... limit' –