2012-02-25 24 views
0

Google App Engineでクエリを実行するときに複数の.order()呼び出しを指定して、サブセットの並べ替えを行うことはできますか?これはGQLで行うことができます。だから、あなたが.order()を呼び出すことができると思っていましたが、うまく動作していないようです。Google App Engineを使用した複数の.order()呼び出し

q = Score.all() 
q.filter("level = ", level) 
q.order("-score") 
q.order("-submitted") 
scoreList = q.fetch(10) 

これは、最新のものと同じ高値を並べ替えます。

+1

あなたは「それが動作していないようです」明確でした。何を得ることが期待され、何を得るのですか? – gae123

+0

上記の例は簡略化されています。私は、「スコア」でソートされたトップ10のスコアのリストを取得し、次に各スコアのソートの中で「提出された」ソートされたスコアを並べることを除きます。したがって、同じ値の2つのスコアがあった場合、最新のものが最初になります。同じ価値の100のスコアがあったならば、私は最新の10を得るでしょう。これはうまくいくと思われますか?そうであれば、私のコードで他の場所を見始めるでしょう。 –

+0

私は期待した結果で私のコードでこれをやっていると確信しています。インデックスが最新でないかどうか疑問に思っていました。すでにデータストアにデータがある場合は、関連するインデックスを追加しましたか? – gae123

答えて

0

ロジャー、あなたのdevの環境でこれを試してみて、それが動作するかどうかを確認:

from google.appengine.ext import webapp 
from google.appengine.ext.webapp import util 
from google.appengine.ext import db 


class Score(db.Model): 
    level = db.IntegerProperty() 
    score = db.IntegerProperty() 
    submitted = db.IntegerProperty() 


class MainHandler(webapp.RequestHandler): 
    def get(self): 
     level = 1 
     if Score.all().count() == 0: 
      Score(level = 1, score = 10, submitted = 10).put() 
      Score(level = 1, score = 10, submitted = 11).put() 
      Score(level = 1, score = 10, submitted = 12).put() 
      Score(level = 1, score = 11, submitted = 10).put() 
      Score(level = 1, score = 11, submitted = 20).put() 
      Score(level = 1, score = 12, submitted = 10).put() 

     q = Score.all().filter("level = ", level).order("-score").order("-submitted") 
     score_list = q.fetch(10) 
     self.response.out.write([ 
       (s.level, s.score, s.submitted) for s in score_list ]) 


def main(): 
    application = webapp.WSGIApplication([('/', MainHandler)], 
             debug=True) 
    util.run_wsgi_app(application) 


if __name__ == '__main__': 
    main() 
関連する問題