0

私は次のモデルを持っています:

class Conversation:
    questionId = db.IntegerProperty(required=True)
    count = db.IntegerProperty(required=True)
    message = db.StringProperty(required=True)

会話は、元の質問 ID、メッセージ数、およびメッセージで構成されます。したがって、データの例は次のようになります。

- questionId: 2; count: 0; message: How are you?
- questionId: 2; count: 1; message: I'm fine thanks, how are your kids?
- questionId: 2; count: 2; message: They're great, growing to fast!
- questionId: 3; count: 0; message: John, your late!
- questionId: 3; count: 1; message: I know, I'm so sorry!

ここでの私の質問は、各質問 ID ごとに最新の (最大の) カウントを取得するためにクエリを実行するにはどうすればよいですか? 上記の例から、次のように返されます。

- questionId: 2; count: 2; message: They're great, growing to fast!
- questionId: 3; count: 1; message: I know, I'm so sorry!

残念ながら、データは例のように並べ替えられて保存されないことに注意してください。したがって、すべての行が順不同であると想像してください。テーブル数もすごい!どうもありがとう!

4

2 に答える 2

0

次の 2 つのオプションがあります。

  • 各レコードに「latest」フラグを追加します。これは、特定の ID を持つ最新の質問に対してのみ true に設定し、新しいレコードがそれを置き換えるときに false に設定します。
  • ID ごとに個別のクエリを使用し、それぞれの最新の質問のみを取得します (並べ替えと.get().

どちらが最も理にかなっているかは、特定の時点で取得する一意の質問の数によって異なります。数が多い場合は、おそらくモデルを変更する必要があります。

于 2012-07-19T06:22:45.763 に答える
0
question_id = 'whatever'
latest_convo = Conversation.gql('WHERE questionId = :1 ORDER BY count DESC', question_id).get()
于 2012-07-19T08:47:08.203 に答える