mysql:3451
From: Hiroyuki Hasegawa <Hiroyuki Hasegawa <admin@xxxxxxxxxx>>
Date: Tue, 27 Mar 2001 19:47:34 +0900
Subject: [mysql 03451] Re: 「次の○○件」の作り方
はせがわです。
table name : test
No | data
------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
とあったとして、
これを5件ずつ表示するCGIが、
test.php3
だとしましょう。
たとえば仮に5件ずつ表示するとして
1ページ目に表示する際のSQLは、普通に呼ぶと
select * from test order by No limit 5;
ですね。これで1~5件だけ取得されるでしょう。
そして、ループにより各行を表示すると思いますが、
ループ終了時、最後に表示したNoを(たとえば)$lastnumという変数に
保存したとします。ここでいえば、5ですね。
そして、test.php3の表示時に、次の5件のリンクを出力する
ことになると思いますが、
printf("<a href=\"test.php3?next=%d\">次の5件</a>",$lastnum);
(C言語チックですんません)
こんな要領で、リンクを張ります。
要は、再度test.php3を呼び出しますが、そこで最後に出力した
番号をパラメータとして渡すように設定するわけです。
すると、test.php3を再度呼ばれますが、そのときには
$nextに値が入っていますよね。
ですので、test.php3で呼び出すべきSQLは以下のようになります。
select * from test where No > $next order by No limit 5
これで、次の5件を取得できますよね。
(ここでいうNoが5以上の5件だから、6~最後まで)
これは、何らかの理由で、行が削除されていて、Noが連続していなくても、
問題ありません。
まあ、$nextに値が入っていないときはゼロを代入するように冒頭に書いて
おけば、初回呼び出し時(nextパラメータがない場合)にも問題ありません。
さらに、呼び出した総数が、5件(limit値)より少ない場合は、最後まで
いってるので、そのときは、「次の○○件」というリンクは表示しないよ
うにすれば綺麗です。
わかりにくい説明ですね(苦笑)
3445 2001-03-27 18:10 [崎山 宏之 <sakiyam] 「次の○○件」の作り方 3446 2001-03-27 18:31 ┣[Akihiko Shinohara <s] 3447 2001-03-27 18:34 ┣["Akinobu YAMAMOTO" <] 3449 2001-03-27 19:18 ┃┗[崎山 宏之 <sakiyam] 3482 2001-03-29 11:04 ┃ ┗["Akinobu YAMAMOTO" <] 3483 2001-03-29 13:02 ┃ ┗[崎山 宏之 <sakiyam] -> 3451 2001-03-27 19:47 ┗[Hiroyuki Hasegawa <a] 3461 2001-03-28 14:44 ┣[崎山 宏之 <sakiyam] 3466 2001-03-28 16:27 ┃┣[Hiroyuki Hasegawa <a] 3468 2001-03-28 16:57 ┃┃┗[崎山 宏之 <sakiyam] @ 3467 2001-03-28 16:46 ┃┗[Toyoshima Hiroshi <t] 3469 2001-03-28 17:23 ┃ ┗[崎山 宏之 <sakiyam] 3470 2001-03-28 17:40 ┃ ┣[Toyoshima Hiroshi <t] 3477 2001-03-28 23:09 ┃ ┃┗["崎山 宏之" <sakiya] 3471 2001-03-28 17:41 ┃ ┣[mohri <mohri@xxxxxxx] 3476 2001-03-28 20:30 ┃ ┗[Toyoshima Hiroshi <t] 3475 2001-03-28 20:17 ┗[とみたまさひろ <tomm]