2009-04-21 10 views
-1

私はStruts 2フレームワークを使用していますが、この質問はStruts 2に関連するものではありません。捻じれのページ設定

私は自分のウェブサイトに何らかのページングをしようとしています。ページに表示するレコードのリストがあるとします。リストには150のレコードがありますが、各ページに50を表示したいので、この場合は3ページが表示されます。もちろん、リストはDBからフェッチされます。

クエリーに7秒以上かかると、が殺され、(質問しないでください)という制限があります。したがって、同時に150件のレコードを取得すると、クエリには7秒以上かかることになります。そこで私たちは毎回50レコードを得ることにしました。この場合、DBに3回(50 50 50)行く予定です。最初に合計(150)を取得するので、何回DBに戻るべきかを知っています。

このようなことをどのように処理するかについてご意見をお聞かせください。私はストアドプロシージャやクエリを調整することが最善の策だと言う人もいるかもしれませんが、SPとクエリがたくさんあるので、これは苦労するでしょう。

いずれの例もありがとうございます。

答えて

0

ページングの処理方法に関する一般的なヒントをお探しですか?クエリを小さく保つために必要なレコードだけをデータベースから取得する必要があると考えると、正しい道筋に立っています。

異なるRDBMSには、レコードを列挙しページングするさまざまなアプローチがあります。 MySQLにはLIMITキーワードがあり、MS SQL Server 2005以降にはROW_NUMBER()機能があり、OracleにはROWNUM特別な列があります。 RDBMSに応じて、これらの機能の使用例を見つけるのは簡単です。

1

初めて実際にフェッチする必要はありません。カウントのみを取得できます(集計関数クエリ)。ライブページ単位のリストは、特に非常に大きなデータセットでは一般的ですが、唯一の問題はページ状態の保証がないことです。つまり、レコードが前のページの順番に挿入され、新しいページに古いレコードがプッシュされたり、逆の場合もあります。しかし、これは一般的に受け入れられる。あなたは、レコードの限られた数を取得するように、ページネーションのための

0

例のクエリは次のとおりです。 - ここに

select * from records limit $start,50 

私はあなたの元のクエリは、レコードから*を選択したと仮定しています。 "limit $ start、50"という文字列を追加するだけです。ここでは最初の50レコードの開始は0に、50-100レコードの開始は50に、100-150レコードの開始は100と等しくなければなりません。 "limit $ start、50"をanyクエリでは、レコード番号$ startから50レコードを取得します。私はこれがあなたのページネーションの問題を解決することを願っています。

関連する問題