Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何设计一个;上周Top播放了;使用SQLite数据库排名?_Sql_Sqlite_Database Design - Fatal编程技术网

如何设计一个;上周Top播放了;使用SQLite数据库排名?

如何设计一个;上周Top播放了;使用SQLite数据库排名?,sql,sqlite,database-design,Sql,Sqlite,Database Design,我有一个播放器软件。它有一个SQLite数据库支持它 我是一个SQL新手,我在猜测如何做一个“排名靠前”的排名是最好的方法。排名靠前的可能是所有时间,上周,上个月,等等 我认为在记录所有音乐播放的日期和时间,并在做了选择与日期范围内,但它看起来非常沉重 有更好的方法吗?您的方法是最简单的,所以我会尝试用一个大日志测试它,看看它的性能如何。如果它做得好,那么就没有必要把事情复杂化 如果它的性能不够好,那么这是一种更复杂的方法: 如果上个月是您将显示的最长时间范围(所有时间除外),那么您可以有一个只

我有一个播放器软件。它有一个SQLite数据库支持它

我是一个SQL新手,我在猜测如何做一个“排名靠前”的排名是最好的方法。排名靠前的可能是所有时间,上周,上个月,等等

我认为在记录所有音乐播放的日期和时间,并在做了选择与日期范围内,但它看起来非常沉重


有更好的方法吗?

您的方法是最简单的,所以我会尝试用一个大日志测试它,看看它的性能如何。如果它做得好,那么就没有必要把事情复杂化

如果它的性能不够好,那么这是一种更复杂的方法:

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

如果这仍然不能很好地执行,您可以为每个时间帧(TopLastMonth、TopLastWeek、TopToday等)创建一个日志表,而不仅仅是一个延伸到最长时间帧的日志表。这样,排名查询就不必使用WHERE子句,因为它们总是汇总表中的所有记录。只有删除查询必须在日期选择,并且这些查询的运行频率可以降低


对于所有时间的排名,您需要一个表,其中包含每首歌曲的记录。每次播放歌曲时,增加播放时间。你的排名将一直看这张表而不是日志。

是的,这是我想象的。非常感谢。