phpとmysqlを使って「次のページ」「前のページ」のリンクだけのページャーを作ろうとしています。
いろいろ考えたり、調べたのですがどうしても理解できないことがあります。
LIMITを使って表示件数を絞ることはできるのですが、ページリンクの作り方がわかりません。
例えば、100件あるデータのうち、1件目から10件目を最初の1ページとし、11件目から1ページ10件でページを表示するためのリンク(ページャー)を作るにはどうしたよいのでしょうか?
たくさんの回答と的確なアドバイスをありがとうございます。
ご指摘頂いた部分を参考に再挑戦してみたいと思いますので、今しばらく未解決のままとさせてください。
ご指摘頂いた内容や自分でも勉強を重ねた結果、なんとかページャーを作ることができました。
回答ありがとうございました!
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
おっしゃる通り、LIMITを使います。
OFFSET個目から、row_count個 SELECTするには以下の様にするとよいようです。
SQL
1SELECT col_name, ... FROM tbl_name LIMIT [offset,] row_count;
投稿2015/09/20 12:26
総合スコア1768
0
ベストアンサー
たとえば「php ページング」などのキーワードで検索するとたくさんのサンプルコードがヒットします。
特にPHPの場合、Webから得られる情報は玉石混交なので、全ての情報がそのまま参考にできる訳ではありませんが、詳しい解説付きのものも多いのでご参考になさってみては如何でしょうか?
ご参考までに以下の2つのページのリンクを貼り付けておきます。
[PHP] ページング機能の仕組みとか作り方とか
[PHP/MySQL] ページング処理 ページャ
投稿2015/09/20 12:25
総合スコア5936
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/09/21 00:52
2015/09/21 16:12
0
お二方のでほぼ答えだと思います。
ページリンクの作成についてはSQLを二回流す事が簡単なやり方です。
LIMITを使わずにCOUNT(*)で件数のみ取得します。例として99件とします。
1ページに何件づつ表示するか決まってれば、割り算などで合計ページ数は出ますよね?例として5件。
そうすると全部で99件なら、計算すると合計20ページと分かります。
GETで今のページ数をやりとりしてKen.sakanakanaさんが書かれてるようなSQLで今のページで必要なデータを取得出来ますよね。
極端20ページ全てのリンクを作るならそのままForで回せば簡単ですね。
今のページ数が分かってればそれを真ん中として例えば前後2ページのページ番号は分かりますね。
今が7ページ目なら前2ページ、後2ページを出すのは簡単です。
「前へ」「次へ」を作るなら、今のページ番号から1引いた物、1足した物をリンクのパラメータ(クエリストリング)に入れれば良い訳です。
後は現在のページ数からKen.sakanakanaさんのSQLのoffsetが(ページ数-1)*ページ辺りの件数 になり、row_countがページ辺りの件数になります。
実際100件程度なら常に全件取得して必要な部分だけ取り出しても良いんですが、1000件くらいからかな?件数取得だけの為に全件取得するとあからさまにパフォーマンスが落ちてきます。
カラム数によっても変わりますが、それを考えるとSQLを2回流す(件数取得と必要データ取得の2回)に抵抗ある方も多いと思いますが、結局は早くなると思います。
これで分からないならもう少し頑張りましょうですかね。
頑張って下さい!
投稿2015/09/20 15:58
総合スコア1614
0
URLパラメータの書式とPHPでの受け取り方が分からないということでしょうか?
参考になりそうなページ
index.php?page=2
ブラウザからこういうURLでindex.phpにアクセスすると、
PHP側では「$_GET['page']」これで「2」を受け取ることができるわけです。
100件あるデータのうち、1件目から10件目を最初の1ページとし
この内容だと何ページ目の表示かさえ分かれば、何件目~何件目を表示すれば良いかを割り出せるので、リンクはこんな感じでとりあえず確認できると思います。
PHP
1<?php 2 $p=1; 3 if( isset($_GET['page']) ){ //サニタイズ 数値なら代入、違えば1 4 if( is_numeric($_GET['page']) ){ 5 $p=$_GET['page']; 6 } 7 } 8 9 //($p-1)*10+1~(+9件)を抽出して表示するPHPプログラムを書く 10 11?> 12<a href="?page=<?php echo $p+1; ?>">次へ</a>
このリンクだとクリックすれば同じphpファイルが呼び出されるので、次の10件が表示されて、リンクは更にその次のページのものになるはずです。
投稿2015/09/20 15:58
編集2015/09/20 16:12総合スコア2068
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/09/20 14:09