• ベストアンサー

PHP MySQL ページング処理

はじめまして、 現在ページング処理で悩んでます。ご協力お願いします。 PHP4.4.6とMySQLを使用し 1ページ10件 MAXページ99ページ 前次12345・・・のように表示させ・・・の部分をクリックすると データが51件以上 前次45678・・・ データが60件以下 前次23456 データが70件以下 前次34567 のように表示させるにはどのような処理、考え方をしたらよいでしょうか? なんとか自力で 前次12345 は表示、動作できたのですがその先どうしたらいいか解かりません。質問解かりにくいかもしれませんが、どうかお知恵をお貸しください。よろしくお願いします。

  • lalla
  • お礼率50% (2/4)
  • PHP
  • 回答数4
  • ありがとう数13

質問者が選んだベストアンサー

  • ベストアンサー
  • gogo-tea
  • ベストアンサー率75% (25/33)
回答No.4

#3です。 もう一度読み直したのですが、、 >前次12345・・・ は1をクリックした場合どこへ飛ぶのでしょうか。 現在1ページ目が表示されているとすれば前という表示もあるとおかしいので、 次23456・・・ となるのではないでしょうか? 2ページ以降を表示しているとしても1というのはどういう状況でなら表示するのかが思い浮かびませんでした。。 その辺が気になったのですがとりあえず自分の解釈の前提で説明させていただきます。参考程度に目を通してください。 どこまで出来ているのかちょっとわからないのでどこから説明したらよいのかもわかりませんが、私はSQLにLIMITをかけて処理をする方法を普段使っています。 最初のページからスタートした場合私の場合なら 次 2 3 4 5 6 ・・・ という表示にします。 次と2は同じリンクが張られます。 10件ずつ表示することを前提に、 LIMITに使うオフセット数は 2→offset=10 3→offset=20 4→offset=30 以下6まで続く となります。 つまり(ページ数-1)*10がそのページに張られるリンクのオフセット数となります。 で本題というか 60<データ件数<=70 なら 前次34567 の考え方ですが、仮にデータ件数が68だとするとページ数は7ですよね。 なので(7-1)*10=60が最後のページのオフセット数です。 表示させたいのは 34567 なのですが、表示が34567となるためには3の前にある2をクリックした時ですよね。 ということは2に張るリンクのオフセット数と同じオフセット数ということになります。 長くなってしまいましたが ・・・に張るリンクのオフセット数は 最後のページのオフセット数 - (10*5) となります。 この例の場合は60 - 50 = 10 ですね。 $onepage = 10; //1ページの表示件数 $self = $_SERVER['SCRIPT_NAME']; $lastofst = ($lastpage-1)*10; //最終ページオフセット $jumpofst = $lastofst - 50; //リンクに張られるオフセット //リンク先文字列生成 $jump = $self . "?ofst=" . $jumpofst . "&onepage=" . $nepage; $str .= '<a href="'.$jump.'">'."・・・".'</a>'; echo " ".$str; こんな感じかと思います。 34567自体の表示は 最後が7とわかればスタートが7-5から1を加えながら7になるまでforで生成してあげればいいですよね。

lalla
質問者

お礼

ご連絡遅くなりすいませんでした。 うまくいきました。 ご協力ありがとうございました。

その他の回答 (3)

  • gogo-tea
  • ベストアンサー率75% (25/33)
回答No.3

>データが51件以上 前次45678・・・ ここの意味がわからないのですが・・・。 下の二つは 50<データ件数<=60 なら 前次23456 60<データ件数<=70 なら 前次34567 ということですよね。 要は最後のデータを表示するページを合わせて後ろから5ページのリンクということでしょうか。 それならできそうな感じがしますけど。。 でも >MAXページ99ページ ということは10×99=990なのでデータ件数は991~1000の間の件数あるってことになってしまうんですけど。。 随時増えていくデータで、増え続けても最大1000件までってことなんでしょうか。 日本語は難しいです。。

lalla
質問者

補足

日本語下手ですいませんです。 データが51件以上 前次45678・・・ 一旦おいといて、 50<データ件数<=60 なら 前次23456 60<データ件数<=70 なら 前次34567 だとどのように考えたらよろしいでしょうか? よろしくお願いします。 >MAXページ99ページ データが1000件以上あった場合99ページということなのですが 本当に日本語下手ですいません

  • awazak
  • ベストアンサー率36% (61/165)
回答No.2

pearのpager なんかはいかがでしょうか? http://www.go-pear.org/manual/ja/package.html.pager.php やりたいことは、これのスライド型じゃないですか?

参考URL:
http://www.go-pear.org/manual/ja/package.html.pager.php
lalla
質問者

補足

すいません素人なので pearってプログラム言語なんでしょうか? PHPの中に書いても問題ないのでしょうか?

  • vaio09
  • ベストアンサー率37% (756/2018)
回答No.1

まずこのページの内容を理解しましょう。

参考URL:
http://lolipoking.lolipop.jp/php/patio.cgi?mode=past&no=2660
lalla
質問者

お礼

早速貴重な情報ありがとうございました。何度も読み返し前次12345の処理はうまくいきました。 色々自分で考えテストしたのですが ・・・の処理については解決できませんでした。どのように考えたらよいのでしょうか?ご協力お願いいたします。

関連するQ&A

  • phpでページング処理の書き方

    環境:php+mysql サイト内検索をphpで書いてます。 ■やりたいこと 検索結果が10件として1ページの検索結果数を3件とした場合 ページングは4ページまでとして、最終ページの4ページ目で 「次へ」のボタンを非表示にしたいです。 ■現状 検索結果は表示されますが、検索結果ページで 「次へ」 や 「戻る」 ボタンをつけて動作する際、いつまでの「次へ」やボタンが表示されページングできてしまいます。。 実際に書いている処理 <?php if ($num > 3){//検索結果が3件以上でページングが表示される if($page>0){ echo "<a href='./re.php?key={$a}&pages=".($page-1)."'>前の3件</a>"; } echo "&nbsp;&nbsp;|&nbsp;&nbsp;<a href='./re.php?key={$a}&pages=".($page+1)."'>次の3件</a>"; } ?> if ($num > 3)で何か処理を書かなければならないと思いますが、、 アドバイスいただければ幸いです。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • ページング

    いろいろ参考にしてページングについて考えているのですが、なかなか正常に動作しません。 1ページに10件のデータを表示させる ページング処理をASPとMYSQLを使用して考えています。 どなたかご教授ください。 よろしくお願いします。

  • php ページング

    php ページング php勉強中のものですが ページングについて調べてはいるものの 中々ピンとこず 何か簡単なサンプルコードを教えていただけないでしょうか。 データ表示は10件ほどで データの量は 決まっていないです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • Ajaxでページングしたいのですが・・・

    Ajaxでページングしたいのですが・・・ phpとmysqlでページングを行っています。詳しくは下記の通りです。 データの総数は全部で35件あります。 1ページ目(hoge.com/list/?id=1)で 1件目~18件目を表示します。 2ページ目(hoge.com/list/?id=2)で 19件目~35件目を表示します。 1ページ目には『次のページ』と書いた画像を表示させ2ページ目へリンクを張り 2ページ目には『前のページ』と書いた画像を表示させ1ページ目へリンクを張っています。 ページングの動作としては問題ないのですがこのページングをAjaxと連携させるには どうすればいいのでしょうか? できるだけurlにパラメータは付けずにhoge.com/list/としクリックしたリンクにより値を送りそれぞれのページングデータを表示させたく思っております。 検索してみたのですが前もってそれぞれ静的ページを作っておきそれを読み込ませるという方法はあったのですがあくまでも動的に行いたいです。 行い事のサンプルページの紹介でも構いませんので実現できる方法を教えてください。

  • PHPでページング

    PHPで、1ページに20件表示とか ページング機能をつけたいのですが一向に分かりません。ASPでは、pagesize関数で作れたのですが・・・。 サンプルソースとかありませんか?

    • ベストアンサー
    • PHP
  • ページング処理

    こんにちわ。今、ページング処理に苦しんでいるものです。 データベースでデータが50件あるとして、10件以上あるときは 「次の10件へ」や「前の10件へ」というリンクをつくりクリックしたときにページ遷移をするというようなページングを実装したいのですが。 考え方がわからず、悩んでおります。 セレクト文で以下のように $strSQL = ""; $strSQL .= " SELECT "; $strSQL .= " * "; $strSQL .= " FROM "; $strSQL .= " BBS "; $strSQL .= " ORDER BY "; $strSQL .= " ID DESC "; $strSQL .= " LIMIT 10 "; $strSQL .= " OFFSET 20 "; 昇順で20行目から10行だけ取り出すということはできたのですが。 ページング処理のロジックがわからないのです。 なにか簡単なものでもいいので、記述などをしていただけますでしょうか?

    • ベストアンサー
    • PHP
  • ページング機能の実装について@PHP+MySQL

    ページング機能の実装について 【PHP+MySQL】 表示させる要素が多いものでは数万件あり、 たとえば1ページあたりの表示を10件とすると数千ページになります。 実現したい機能は ------------------------------------------------- ◆10ページ以内に収まる件数なら全ページをリンク表示。 [ 1 2 3 4 5 6 7 8 9 10 ] ◆上記以外の場合では↓これと同じくする。 http://tutorials.ajaxmasters.com/pagination-demo/ ◆上記paginationで [...] に当たるページが100ページ以上ある 場合は中間のページをリンク表示。 [ 1 2 ... 135 ... 271 272 273 274 275 ... 612 ... 1499 1500 ] ------------------------------------------------- を考えています。 質問ですが、 1.このようなものを容易に実装できるようなライブラリ等を ご存知の方いらっしゃいましたらご教示ください。 2.上に書いた jquery の pagination は、まだ試してないのですが、 これは数万件のレコードをクライアント側で抱え込んで クライアント側のスクリプトでページングするものでしょうか? もしそうであると件数と容量が大きいので都合悪いかなと思いまして。 総ページ数(或いは総件数)と 1ページあたりの表示件数と クリックされた要求ページを postで持ってページをクリックする度にsqlで最低限の情報を引き出し表示しようと考えています。 上の質問についてと、もしくはもっと効率的な方法があるという方いらっしゃいましたらご教授願います。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • googleの様なページング処理

    mysqlのデータを表示させる時にgoogleの様なページングにしたいと思っています。 初心者の為、自力で作る事ができないのでフリーで配布されているスクリプトを参考にしようと探しているのですが、そのようなページングを使っているスクリプトが見つかりません。 参考サイトや配布されているサイトをご存知の方がいましたら、是非教えてください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 検索データのページング処理について

    独学でphpを勉強しているのですが、ページング処理が出来ません。 1ページの表示を10件くらいにし、よくある「次のページ」という機能を付けたいのです。 下記のページを参考にしているのですが、なかなか正常に動きません。 http://bicniws.okwave.jp/kotaeru.php3?q=1893327 具体的には、 リンクの表示部分を 99→$list_up にするとリンクが正常に動きません。しかし、99→$list_up にすることで検索データの件数は表示します。 また、検索データは表で表示しているのですが、検索したデータが全部表示されてしまいます。 なにぶん初心者のため行き詰まっています。 分かり難い文章で申し訳ありませんが、どなたかご教授いただければと思います。

    • ベストアンサー
    • PHP
  • PHP+MySQLの繰り返し処理で…

    PHPとMYSQLを使ってWEBページを作っています。 わからないところがあるので、どなたか教えていただけないでしょうか?php5+mysql4.0.1です。 検索フォームから送られてきた条件をもとに、1ページに10件の検索結果を表示しています。表示するのはテーブル1の名前で、ここまではうまくいっています。 例:------------------------------------------ 検索結果 神奈川県 林さん 東京都 遠藤さん 北海道 近藤さん 例:------------------------------------------ このあと、上記クエリの結果が続く限りテーブル2 から名前に該当する趣味を表示したいと思います。 例:------------------------------------------ 検索結果 神奈川県 林さん テニス 東京都 遠藤さん サッカー 北海道 近藤さん 絵画 例:------------------------------------------ この処理を加えると、一ページに10件表示されていたものが最初の一件だけしか表示されなくなってしまいます。whileの中に新たにクエリを書いているからでしょうか…? 以下に問題部分だけ見やすくまとめなおしたソースを書きました。 (1)$sql = "SELECT name,ken FROM tablename where ken=$ken"; $mysql->query($sql); while($row = $mysql->fetch()){ $name = $row[name]; (2)$sql2 = "SELECT syumi FROM tablename2 WHERE name='$name'"; $mysql->query($sql2); while($row2 = $mysql->fetch()){ $syumi = $row2[syumi]; } echo "$ken"."$name"."$syumi"; } わかりづらい説明ですみません。 テーブル1に趣味のフィールドを作ることはできない前提で、このままのDB構造でうまく上記を解決することはできますか? ご指導よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう