- ベストアンサー
SQLのデータを分割してブラウザに表示
環境は MYSQL PHP 4.1.3 WIN2000 よく掲示板等のHPで分割して表示しているのをよく見かけます。 ”次の5件表示”とかのやつです。 あれはどういうロジックになっているのでしょうか? 例えば今DBに30件の顧客データがあるのですが、 ブラウザで1ページに10件表示するとして3ページにわたる場合どう作成すればいいのか教えて頂けないでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
私だったら、下記のようにします。 (試してないのでくれぐれも、ご自分で再検討してください) SELECT * FROM table_name LIMIT $x OFFSET $y; と言うSQL文を効率よく発行するロジックを考えます。 10件表示という固定であれば、$x=10と固定できますが、色々なところで使い回しをしたいロジックですので、$xはやはり変数のままにしておく方がいいでしょう。 次に$yについてですが、これは1ページ目であれば0、2ページ目であれば10、3ページ目であれば20と言うことになります。 つまり1ページ目は、 SELECT * FROM table_name LIMIT 10 OFFSET 0; 2ページ目は、 SELECT * FROM table_name LIMIT 10 OFFSET 10; 3ページ目は、 SELECT * FROM table_name LIMIT 10 OFFSET 20; を発行すればいいわけです。 SQL文の検索条件の部分(SELECT * FROM table_name)が固定であれば、毎回変わる部分は、OFFSETの値だけですね。 もし、上記検索条件部文が固定でないのであれば、その部分も変数にしておかなければなりません。 (そうしておいたほうが、色々なところで使い回しできます。それは自分で考えてみてくださいね。) で、話を戻します。 ようはPHP側で、覚えておかなければいけないのはOFFSETの値だけです。 値を記憶する方法は、GET,POST,SESSION等色々ありますが、ここではSESSIONを使います。 ようは現在のページのOFFSETの値($y)をセッションに記憶しておきましょう。 そして、「次のページ」がクリックされたとき、そのページのOFFSETの値は$y+$xですね。 逆に「前のページ」がクリックされたときは、$y-$xです。 この辺はご理解いただけるでしょうか? 1ページ目が0,2ページ目が10,3ページ目が20なので、1ページ目から2ページ目へ移行したとき、0+10=10。 2ページ目から3ページ目へ移行したとき10+10=20。 3ページ目から2ページへ目移行したとき20-10=10。 となるわけです。 そこで、ページが移行したときに、セッションに登録されている$yの値を呼び出し、$xほど、足し算、引き算をして、現在のページの$xを求め、それを再びセッションに登録しておけばいいのです。
その他の回答 (1)
- karon24
- ベストアンサー率40% (8/20)
私が以前作成したときのロジックなんですが、 30件のレコードにはそれぞれ数値の主キーがついているとします。 1.主キーの降順でソートしてレコードを取得し、先頭から10件を表示。 このとき10件目のキー値を退避しておきます。 2.「次の10件」を選択された場合、退避しておいたキーの値よりも 大きい値のキーを持つレコードを再び主キーの昇順でソートして取得し、 先頭から10件表示。 この繰り返しですかね。 逆に前に戻るときは、 現在表示している1件目のレコードよりも小さい値のレコードをキー値の降順で 取得し、先頭から10件表示。 となります。 実際うまくいったのですが、説明がわかりずらいかもしれないので「自信なし」 にしておきます。