我有一个应用程序,其中包含音乐排行榜以展示热门曲目(显示前十名)。
然而,我想限制排行榜,使得任何特定用户不能同时拥有超过2首歌曲在排行榜上。如果艺术家A通常会有排行榜中的4个前十名位置,那么只会显示艺术家A的前两首热门曲目(假设它们当然不是由艺术家A创作的)。此时,列表中的第11和第12项将各上升2个位置。
所以,假设这是当前的热门曲目部分:
然而,我想限制排行榜,使得任何特定用户不能同时拥有超过2首歌曲在排行榜上。如果艺术家A通常会有排行榜中的4个前十名位置,那么只会显示艺术家A的前两首热门曲目(假设它们当然不是由艺术家A创作的)。此时,列表中的第11和第12项将各上升2个位置。
所以,假设这是当前的热门曲目部分:
- 艺术家A的歌曲A
- 艺术家B的歌曲B
- 艺术家A的歌曲C
- 艺术家C的歌曲D
- 艺术家D的歌曲E
- 艺术家E的歌曲F
- 艺术家F的歌曲G
- 艺术家A的歌曲H
- 艺术家A的歌曲I
- 艺术家G的歌曲J
- 艺术家A的歌曲A
- 艺术家B的歌曲B
- 艺术家A的歌曲C
- 艺术家C的歌曲D
- 艺术家D的歌曲E
- 艺术家E的歌曲F
- 艺术家F的歌曲G
- 艺术家G的歌曲J
- 艺术家H的歌曲K(之前是#11)
- 艺术家I的歌曲L(之前是#12)
def self.top_tracks_past14(max=3)
Track.find_by_sql(["select COALESCE(sum(plays.clicks), 0), tracks.*
from tracks
left join plays
on tracks.id = plays.track_id
and plays.created_at > now() - interval '14 days'
inner join albums
on tracks.album_id = albums.id
inner join users
on albums.user_id = users.id
group by tracks.id
order by 1 desc limit ?", max])
end