質問

サイト内のすべてのユーザーのリストを表示したいのですが、年齢ごとに10人だけを表示したいです。私はこれを正確に行う方法を知りません。すべてのユーザーを1つのページに表示するだけでそれを行う方法を知っていますが、それはあまり良くありませんか?

現在使用しているコードを使用すると、最初の10人のユーザーのみが何度も取得されます。 一度のクエリですべてのユーザーを取得し、それをグローバルに保存してから、リスト内を移動して次の10個などを表示できるようにしたいと思います。

私は、JavaとSpring Frameworkを使用して、考えているソリューションのいくつかをappengineで開発しています

  1. セッションに保存してリストを確認します(非常に悪いと思います)
  2. それをJSP、特にスコープ、ページ、リクエストなどの1つに渡します。しかし、リクエストは機能しないと思います。
  3. これを処理できるSpringコントローラーを探します。
役に立ちましたか?

解決

一般的に言えば、ページで「GET」または「POST」を使用してフォーム変数を使用します。これは数字になります。サーブレットでそれを受け取ると、ページ番号とページごとの設定行に基づいて範囲を計算します。

大きなデータセットのページングをご覧ください(はい、Python同じ原則が適用されます)およびGoogleのクエリとインデックス App Engineのドキュメント。

他のヒント

http://valuelist.sourceforge.net/

をご覧ください。

ページサイズを10に維持すると、ページ番号に基づいて各ページの年齢グループごとに10人のユーザーを取得できます。

SELECT TOP 10 users FROM myusers 
 WHERE AGE = function(page_number) 
 ORDER BY some_ordering

JPA + appengineがそのような種類のクエリをサポートすることを願っています。

一部のデータベースエンジンは、この目的のためにSQLの便利な拡張機能を提供します。たとえば、MySQLでは、「select ... whatever ... limit 50,10」のように言うことができます。ここで、「50」はは、開始する行であり、10は取得する行の数です。次に、表示ページで、次のボタンと前のボタンを配置します。これらのボタンは、適切な開始行番号をサーバーに戻し、クエリでの次の実行に備えます。

使用しているSQLエンジンにそのような便利な機能がない場合は、クエリ固有の" where"を作成する必要があります。ソート順に基づく句。

簡単なケースとして、レコードを" user_name"の順に表示しているとします。 Statement.setMaxRows(10)を使用して、クエリを10行に制限できます。次に、最初の呼び出しで、「select ... what ... ... user order by user_name」と言います。最後に見つかったuser_nameを保存します。次のボタンで、このuser_nameをサーバーに返し、次の呼び出しのクエリは" select ... what ... user from where user_name> 'xxx' order by user_name&quot ;, where 'xxx'です前の呼び出しの最後のuser_name。再度setMaxRowsを実行して、出力が10行に制限されるようにします。その後、ユーザーにこの方法で出力全体をステップスルーさせることができます。

ユーザーを後進させることは少し苦痛です。各ページの開始キー値を含むセッション変数にテーブルを保持することで、これを実行しました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top