2011-04-07 24 views
2

我有一个播放器软件。它有一个支持它的SQLite数据库。如何使用SQLite数据库设计“上周排名靠前”排名?

我是新手SQL和I'm猜怎么可能会做一个最好的方式“打顶” ranking.The顶部发挥可能是从所有的时间,上周,上个月等。

我认为在记录随着日期和小时播放的所有音乐,并在做了一个选择范围内的日期后,但它看起来非常沉重。

还有更好的办法吗?

回答

2

你的方法是最简单的,所以我会尝试对大日志进行测试,看看它是如何执行的。如果它做得好,那么不需要使事情复杂化。

如果它不执行不够好,那么这是一个更复杂的方法:

如果最后一个月是最长的时间框架,你会显示(比所有其他时间),那么你可以有一个日志表仅包括上个月的播放。每次播放歌曲时,将其添加到日志中,然后定期删除超过一个月的记录(每次插入记录或每天一次)。这样你的查询就会有更少的记录来处理。上周的排名仍然需要在日期范围内选择,但它应该更快。

如果仍然不够好,您可以为每个时间范围(TopLastMonth,TopLastWeek,TopToday等)制作一个日志表格,而不是仅延伸最长时间范围的日志表格。这样,排名查询将永远不必使用WHERE子句,因为它们将始终汇总表中的所有记录。只有DELETE查询将不得不在日期上进行选择,而且这些查询可以不经常运行。

对于所有时间排名,您将需要一张表格,每首歌曲的记录。每播放一首歌曲,增加Times Played字段。您所有时间的排名将查看此表而不是日志。

+0

是的,我想象。谢谢 ! – bratao 2011-04-08 02:11:08