0

jquery と DataTables プラグインを使用して php サイトを構築しています。私のページは、ページネーションが機能する必要があるのと同じようにレイアウトされていますが、大規模なデータセットを処理する際に、サーバーが各「ページ」内に記載されている 10 行 (それ以上になる場合もあります) の制限とは対照的に、返されたすべての行をプルしていることに気付きました。

クエリの結果を制限しながら、それらの結果の ID 番号をメモリに保持して、ページ 2 がヒットした (または結果番号が変更された) ときに新しいデータのみが検索されるようにすることは可能ですか?

このようにすることは意味がありますか?

2000行が返されたDBにクエリを実行したくないだけで、「フロントエンドプラグイン」を使用して、最初からページに正直にあるときに他の結果が隠されているように見せます。

4

1 に答える 1

1

SQL の LIMIT 句には、制限とオフセットの 2 つの部分があります。

最初の 10 行を取得するには:

SELECT ... LIMIT 0,10

次の 10 行を取得するには:

SELECT ... LIMIT 10,10

次の 10 行を取得するには:

SELECT ... LIMIT 20,10

毎回同じように結果セットを ORDER している限り、最初にデータベースに 2000 行すべてを送信するように要求する必要はありません (また、そうしたくありません)。

これと併せてページングを表示するには、クエリに一致する合計行数を知る必要があります。それを処理するには2つの方法があります -

1) 別のクエリで行数を求める

SELECT COUNT(*) FROM table WHERE ...

2) クエリで SQL_CALC_FOUND_ROWS ヒントを使用します。これにより、要求した 10 行のみを返す前に、クエリに一致する行数を計算するよう MySQL に指示します。SELECT FOUND_ROWS()次に、クエリを発行してその結果を取得します。

SELECT SQL_CALC_FOUND_ROWS column1, column2 ... LIMIT 0,10

2 は、各ページの読み込みに余分なクエリを追加しないため、推奨されます。

于 2010-11-16T00:25:09.283 に答える