0

つまり、ページのアイテムの量に関する情報を取得し、必要なLIMITを使用してSQLクエリを作成するための最も効率的な方法です。または、すべてのアイテムを取得してから、php関数で配列を切り抜く必要がありますか?

ここで、2つのクエリを実行します。1つ目はすべてのアイテムをカウントし、2つ目はLIMITで必要なアイテムを取得します。

OK、もっと具体的にします。たとえば、自分のページに質問と、この質問に対する20の回答を表示する必要があります。下部にはページコントロールがあります。次のページ、前のページなどへのリンクです。適切な数のリンク(回答数/ 20)を表示したいのですが、リンクに移動したときに適切な回答を受け取りたいです(たとえば、3dページの41から60)。では、適切な数のリンクを表示し、各リンクの適切な回答を取得するために、アイテム(回答)の数を取得するための最良の方法は何ですか?

4

2 に答える 2

2

クエリに含まれるアイテム/回答の数を知りたいと言っていると思いますが、ページネーションのために一度に読み取るアイテムは最大20個です。

まず、ページ付けパッケージを探す必要があります。多くの人が以前に同じ問題を抱えていました。おそらく、プログラミング言語とフレームワークのための無料/オープンソースとプロプライエタリソリューションの両方が存在します。(あなたが使用している言語を言うなら、誰かがあなたのために解決策を勧めることができると確信しています。)

とにかく、私は物事がどのように機能するかを知りたいので、これが通常の方法です

私の知る限り、ページネーションコードは、select count(*) from tblX where somethingこの数値をページあたりのアイテム数で除算し、上限を使用して1つのクエリを実行することでページを計算します(例:4.1 => 5)。

ページごとの結果を一覧表示するには、新しいクエリが必要です。カウントクエリは、すべての結果を取得して不要な結果を破棄するよりもはるかに高速であることを心配しないでください(これがこのページのトップストーリーになるためのレシピです)。select * from tblX where something limit Y offset ZYはページあたりのアイテム数、Zは(requested_page - 1)*Y;のようなものです。ページ1にはオフセット0があり、ページ2にはオフセット20(Yが何であるか)などがあります。

ただし、これを手動で実装しようとしないでください。不必要で、面倒で、エラーが発生しやすく、既成のソリューションをカスタマイズするために時間を費やす方がはるかに優れています。

于 2008-11-14T09:46:05.273 に答える
1

ページネーションなどを行うために、読み取る行数をカウントする必要があると思いますか?あなたの質問の文脈でのLIMITの必要性を理解していません。ただし、見つかった行数をカウントしたいだけの場合は、次のいずれかを使用してください。

次のようなすべての行の数を選択します。

select count(*) as counted, name, address
from contact

または見つかった行:

SELECT SQL_CALC_FOUND_ROWS, name, address
from contact

これはmysql固有の可能性があります。よくわかりません。

アップデート:

ページネーションの場合、次のようなことを行います-(擬似コード)

$ rows = array($ result)
$ num_rows = sql_calc_found_rows
$ per_page = 20
$ pages = ceil($ num_rows / $ per_page)

page
$ rows_this_page = array()
$ rows_this_page = get_values($ rows、(min index)$ page_number * $ per_page-$ per_page、(max index)$ page_number * $ per_page-1)

于 2008-11-14T08:24:23.037 に答える