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 に答える