お蔵入り
MySQLとPHPでページング機能を作りたい
MySQLとPHPでページング機能を作りたいのですがどのようにしたらいいですか?サブクエリを使えないみたいでLIMITを使おうと思ったのですが、1ページ表示しか出来なくて困っています。下に数字のリンクを表示して押されたページの内容を表示したいです。10件づつ表示したいです。よろしくお願いいたします。
2006-06-28 16:52の質問
この質問は、30日間解決しなかったために自動的に質問が一旦閉じられました。
Ads By Google
回答(2)
1.
2006-06-28 17:05:38
2.
2006-06-29 01:27:10
以下のような感じになります。
//-----------------ここから
define("PAGER_UNIT",10);
#$_GET[p]にページ数が指定されている、つまり、
# http://.../foo.php?p=2
#などと指定されているものとします。
#ページ指定(ホントは「数字なら」の条件をつけた方がベター)
##指定なし/p=1なら1件目~
##p=2なら11件目~・・・
$ofst=($_GET[p])?PAGER_UNIT*($_GET[p]-1)+1:1;
#$ofst件目~$ofst+PAGER_UNIT件目までレコード取得
$sql="select * from table order by key1 limit $ofst ,".PAGER_UNIT;
#・・・SQL実行
#全レコード件数を取得
$sql="select found_rows()";
#・・・SQL実行
#ページへのリンク作成
//-----------------ここまで
「limit a, b」=a件目からbレコードだけ、の意味です。
全レコード数を得るのは、found_rows()でなくてもできます。
ここで得た値を$n_foundとして、
$n_page=floor(($n_found-1)/PAGER_UNIT)+1;
とすれば、全ページ数が得られます。あとは、
for($i=1;$i<=$n_page;$i++)
で、
foo.php?p=$i
なリンクを作ってやればOKです。
//-----------------ここから
define("PAGER_UNIT",10);
#$_GET[p]にページ数が指定されている、つまり、
# http://.../foo.php?p=2
#などと指定されているものとします。
#ページ指定(ホントは「数字なら」の条件をつけた方がベター)
##指定なし/p=1なら1件目~
##p=2なら11件目~・・・
$ofst=($_GET[p])?PAGER_UNIT*($_GET[p]-1)+1:1;
#$ofst件目~$ofst+PAGER_UNIT件目までレコード取得
$sql="select * from table order by key1 limit $ofst ,".PAGER_UNIT;
#・・・SQL実行
#全レコード件数を取得
$sql="select found_rows()";
#・・・SQL実行
#ページへのリンク作成
//-----------------ここまで
「limit a, b」=a件目からbレコードだけ、の意味です。
全レコード数を得るのは、found_rows()でなくてもできます。
ここで得た値を$n_foundとして、
$n_page=floor(($n_found-1)/PAGER_UNIT)+1;
とすれば、全ページ数が得られます。あとは、
for($i=1;$i<=$n_page;$i++)
で、
foo.php?p=$i
なリンクを作ってやればOKです。
回答レベル : 回答
Ads By Google
コメント(3)
#1. ciao
2006-06-28 17:26:06
sql自信はどのように表記したら良いですか?あとページ数のところとの関連付けはどのようにしたらいいですか??
#2. ciao
2006-06-28 17:26:39
sql自信はどのように表記したら良いですか?あとページ数のところとの関連付けはどのようにしたらいいですか??
#3. ★オニキス☆
2006-06-29 02:42:19
余談ですが、limitを使わなくても、PHPの配列、たとえば、$foo[]に全部取得して、$foo[$ofst...$ofst+PAGER_UNIT]だけ表示に使っても同じことになります。こっちの方がPHPのメモリを喰うのとDBとの通信が増えるので、パフォーマンスは落ちます。
