2

我正在创建一个 Django 应用程序,其中有一个表,其中包含“项目”、它们的创建日期以及它们拥有的点数。我想写一个查询,返回过去 4 天得分最高的项目,然后是前 4 天得分最高的项目,依此类推。我想知道如何才能做到这一点(我对 SQL 很陌生,如果这是一个基本问题,我很抱歉)。我以为我可以在我的 Django 视图中迭代获取每组 4 个中的顶级记录,然后组合这些对象,但这需要我为每组访问数据库,我猜这将是一个不好的方法正在做?任何指针将不胜感激!

谢谢!

4

1 回答 1

5

不幸的是,没有办法避免在这里为每个组访问数据库。不过,这应该不是什么大问题,我假设您会将组的数量限制在合理的范围内?如果您担心数据库负载,请确保索引您的“创建日期”和“点”字段。

您的代码应类似于:

from datetime import date, timedelta
from models import Item

groups = []
for i in range(0, 10):
    items = Item.objects.filter(date_created=date.today() - timedelta(i))
    groups.append(items.order_by('-points'))
于 2012-05-07T03:26:21.447 回答