2016-12-14 26 views
0

我使用Sequel gem連接到我的Postgres數據庫 - 我有播放列表和曲目,它們有許多關係。如何查詢many_to_many與Sequel gem和Postgres的關聯

我很難找到最有效的方式來查詢播放列表中最常見的10首曲目。有人能給我一個如何解決這個問題的例子嗎?

+0

請顯示示例數據,'order by ... limit' –

回答

0

也許最好使用型號爲連接表:

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進行此項工作。