0

303 Game() エンティティを持つ GAE データストアがあります。

class Game(db.Model):
    title = db.StringProperty(required = True)
    slug = db.StringProperty(required = True)
    category = db.CategoryProperty()
    description = db.TextProperty(required = True)
    created = db.DateTimeProperty(auto_now_add = True)

「スラッグ」プロパティは、すべての空白をハイフンに置き換え、すべての特殊文字を削除することを除いて、タイトルに似ています。例: (「最初のゲーム!」は「最初のゲーム」になります)

Web サイトでは、Bootstrap の折りたたみアコーディオンを使用して 303 のゲームすべてをリストしています。それは問題なく動作しますが、非常に多くのゲームがあるため、アルファベットの文字を一覧表示するサイド ナビゲーションをセットアップしようとしています。ユーザーは文字の 1 つをクリックして、リストの特定の位置にジャンプします。例: (ユーザーが「N」をクリックすると、ページは「N」で始まるゲームにジャンプします)。

「スラッグ」をHTMLにハードコードすると、目的の場所に正しくジャンプするため、これが機能することはわかっています。ただし、「スラッグ」は正しい「スラッグ」の前にある必要があります。そうしないと、正しくジャンプしません。例: (ユーザーが「N」をクリックすると、正しい位置にジャンプし、ページの上部に「N」ゲームを表示するには、HTML のスラッグが「my-last-m-game」である必要があります)。

私の質問 (長々とした説明で申し訳ありません) は、GQL クエリを実行して、アルファベットの各文字の最後のゲームを取得することは可能ですか? それとも、すべてのゲームをリスト/辞書に入れて、その方法で正しい「スラッグ」を取得する方が良いですか? または、データ自体にプロパティを追加する必要があります。これにより、「A」ゲームまたは「T」ゲームのみを GQL 検索して、正しい「スラッグ」を取得できます。または、Bootstrap で使用できるオフセットがあります。これにより、最初の「N」ゲームの「スラッグ」を取得し、それを使用してページ上の正しい位置にジャンプできますか?

ご協力いただきありがとうございます。stackoverflow に投稿するのは初めてです。正しく行っていない場合は申し訳ありません。

4

2 に答える 2

0

文字列に対してプレフィックスマッチを使用できます。u"\ufffd" は最大の Unicode 文字であるため、名前 < u"b"+u"\ufffd" でクエリを実行し、名前で並べ替えると、"b" で始まる要素のトリックを行う必要があります。このようなフィルタリング/順序付けでは大文字と小文字が区別されるため、追加のフィールドを小文字で保存する必要がある場合があることに注意してください。

于 2013-01-28T11:25:08.970 に答える
0

もう 1 つのオプションは、ほとんどのゲームで null に設定されている lastGameForLetter と呼ばれる Game のフィールドを持つことです)。ゲームを挿入すると、これを更新する必要がないことを確認するために追加のチェックが必要になりますが、クエリははるかに簡単になります。私たちは、めったに書かないが頻繁に読まれるものに対して、常にこのようなことをしています。

于 2013-01-28T14:25:05.777 に答える