2012-05-07 132 views
2

我創建了一個Django應用程序,其中我有一個包含'項目'的表格,它們的創建日期以及它們的點數有。我想寫一個查詢,返回最近4天內得分最高的項目,然後是4天前得分最高的項目,依此類推。我想知道我該如何去做(我對SQL很陌生,如果這是一個基本問題,我非常抱歉)。我認爲我可以遍歷Django視圖中的每個集合中的4個頂級記錄,然後合併這些對象,但這需要我爲每個集合敲擊數據庫,並且我猜測這會是一種糟糕的方式。正在做?任何指針將非常感激!獲取4天內創建的每個記錄集中的「最高」記錄

謝謝!

回答

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')) 
+0

感謝您的答案男子,欣賞它。 – iman453