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]