お蔵入り

MySQLとPHPでページング機能を作りたい

MySQLとPHPでページング機能を作りたいのですがどのようにしたらいいですか?サブクエリを使えないみたいでLIMITを使おうと思ったのですが、1ページ表示しか出来なくて困っています。下に数字のリンクを表示して押されたページの内容を表示したいです。10件づつ表示したいです。よろしくお願いいたします。

2006-06-28 16:52の質問
この質問は、30日間解決しなかったために自動的に質問が一旦閉じられました。
Ads By Google

回答(2)

1.

2006-06-28 17:05:38
LIMITとOFFSETを合わせて使うとできます。
自信度 : 自信なし 回答レベル : アドバイス

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です。
回答レベル : 回答
Ads By Google

コメント(3)

#1.  ciao
2006-06-28 17:26:06

sql自信はどのように表記したら良いですか?あとページ数のところとの関連付けはどのようにしたらいいですか??

#2.  ciao
2006-06-28 17:26:39

sql自信はどのように表記したら良いですか?あとページ数のところとの関連付けはどのようにしたらいいですか??

2006-06-29 02:42:19

余談ですが、limitを使わなくても、PHPの配列、たとえば、$foo[]に全部取得して、$foo[$ofst...$ofst+PAGER_UNIT]だけ表示に使っても同じことになります。こっちの方がPHPのメモリを喰うのとDBとの通信が増えるので、パフォーマンスは落ちます。

トラックバック

トラックバックURL: