質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

4回答

11761閲覧

phpとmysqlでページャーを作る

twin_bird

総合スコア230

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

4クリップ

投稿2015/09/20 12:14

編集2015/09/25 14:28

phpとmysqlを使って「次のページ」「前のページ」のリンクだけのページャーを作ろうとしています。

いろいろ考えたり、調べたのですがどうしても理解できないことがあります。

LIMITを使って表示件数を絞ることはできるのですが、ページリンクの作り方がわかりません。

例えば、100件あるデータのうち、1件目から10件目を最初の1ページとし、11件目から1ページ10件でページを表示するためのリンク(ページャー)を作るにはどうしたよいのでしょうか?

たくさんの回答と的確なアドバイスをありがとうございます。
ご指摘頂いた部分を参考に再挑戦してみたいと思いますので、今しばらく未解決のままとさせてください。

ご指摘頂いた内容や自分でも勉強を重ねた結果、なんとかページャーを作ることができました。
回答ありがとうございました!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

おっしゃる通り、LIMITを使います。
OFFSET個目から、row_count個 SELECTするには以下の様にするとよいようです。

SQL

1SELECT col_name, ... FROM tbl_name LIMIT [offset,] row_count;

投稿2015/09/20 12:26

Ken.sakanakana

総合スコア1768

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

twin_bird

2015/09/20 14:09

回答ありがとうございます。 SQLはわかるのですが、そのSQL文をどのように駆使してページリンクを作成していけばいいのでしょうか?
guest

0

ベストアンサー

たとえば「php ページング」などのキーワードで検索するとたくさんのサンプルコードがヒットします。

特にPHPの場合、Webから得られる情報は玉石混交なので、全ての情報がそのまま参考にできる訳ではありませんが、詳しい解説付きのものも多いのでご参考になさってみては如何でしょうか?

ご参考までに以下の2つのページのリンクを貼り付けておきます。
[PHP] ページング機能の仕組みとか作り方とか
[PHP/MySQL] ページング処理 ページャ

投稿2015/09/20 12:25

pi-chan

総合スコア5936

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

twin_bird

2015/09/20 14:07

回答ありがとうございます。参考リンクですが、既に参考とさせて頂いたサイトでした。 いろいろなページャーの作り方があるみたいですが、テーブルから取得したデータをどのようにページリンクに反映させるのかがわからない状態です。 <a href="#">次のページ</a> #の中に ファイル名?page=~のような形でリンクを生成するみたいですが、そのシンタックスが参考書等で見たことないものでして、理解不能です(泣) ここの?pageという書き方は何なんでしょうか? また、そもそもリンク先にはどのようなコードを入れればよいのでしょうか? [PHP] ページング機能の仕組みとか作り方とか ーこちらのサイトでは$_GET["page"]というコードが理解できません。pageとはどこからくるデータなのでしょうか?
pi-chan

2015/09/21 00:52

htmlの解説記事やPHPのリファレンスは参照されていますか? 1)「ファイル名?page=~のような形でリンク」はPHPではなくてhtmlの機能ですので、こちらをご参照ください。 > http://www.fujitsu.com/jp/solutions/infrastructure/dynamic-infrastructure/sdas/technology/web-apl/01-http-protocol/ これはGETメソッドを使用した場合のhtmlリクエストの方法で、"?page=~"の部分は遷移先のページへ「page=~」という情報を受け渡すためのURLパラメータというものです。 2)$_GET["page"] についてはこちらをご参照ください。 > http://php.net/manual/ja/reserved.variables.get.php たとえば、"3"ページ目のリンクをクリックするとURLには「http://yahoo.co.jp/?page=3」のようにURLパラメータの形で情報が受け渡され、遷移先のページではURLパラメータの"page"の値から表示すべきページが"3"ページだと知ることができるという次第です。
twin_bird

2015/09/21 16:12

わかりやすく解説していただきありがとうございます。 PHPの範疇だと思っており、リファレンスをさまよっていました。 参考リンクのほうも参考にさせていただきます。
guest

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

landy77

総合スコア1614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

twin_bird

2015/09/21 16:16

回答ありがとうございます。 パフォーマンスの部分までご丁寧に教えていただきありがとうございます。 だんだんと見えてきた気がするのでもうひと踏ん張りしてみます!
guest

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
hirohiro

総合スコア2068

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

twin_bird

2015/09/21 16:14

回答ありがとうございます。 一番モヤモヤしていた部分のコードでして、参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問