- 締切済み
ページング。困っています。
分かる方はいませんか?? <?PHP $countRe=$num_rows; function pager($id,$countRe){ if($id=="") $id=1; $maxPage=ceil($countRe/10); if($maxPage==1 or $maxPage<$id) return false; if($id>6){ $startPage=$id-5; $startMore="<a href=\"$PHP_SELF?id=".($startPage -1)."\">< PREV</a>"; }else{ $startPage=1; } if($id+5<$maxPage){ $endPage=$id+5; $endMore=" <a href=\"$PHP_SELF?id=".($endPage+1)."\">NEXT ></a>"; }else{ $endPage=$maxPage; } $page_footer=""; for($i=$startPage;$i<=$endPage;$i++){ $page_footer.=" ".(($id==$i)?"<span style='font-Size:120%'>$i</span>":"<a href=\"$PHP_SELF?id=$i\">$i</a>"); } $page_footer=$startMore.$page_footer.$endMore; print $page_footer."<br>"; } ?> 現在、このようなソースでページングをしています。1ページにつき10件ずつ表示させたいのです。該当データ11件になったら、ちゃんとリンクが[1,2]と出てくれますが、1ページ目に11件、2ページ目でも11件出てしまいます。理想は説明不要だと思いますが、1ページ目に10件、2ページ目で余りの1件表示させたいです。このソースの問題ではなくSELECT文の問題なんでしょうか??LIMIT 0,10としたら11件該当しなければならないのに10件しか該当しないとなり、これはこれでおかしくなります。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- edomin7777
- ベストアンサー率40% (711/1750)
> $search_query = 'select * from ilab where LIMIT ' . ($_GET['id']-1)*10,10 . ''; > こうですかね?? なんで、やってみないの? まあ、やってみても「,10」が外に出てるから動かないとは思うけど…。
- edomin7777
- ベストアンサー率40% (711/1750)
#2です。 IDが1の時は LIMIT 0,10 IDが2の時は LIMIT 10,10 IDが3の時は LIMIT 20,10 なんだから、ID番号から1を引いて10倍すればページ先頭のデータになるので、 LIMIT (ID番号-1)*10,10 で10件づつ抽出できると思いませんか?
補足
$search_query = 'select * from ilab where LIMIT ' . ($_GET['id']-1)*10,10 . ''; こうですかね??
- edomin7777
- ベストアンサー率40% (711/1750)
まずは、どうやってSELECT文を記載しているか示した方が速いと思います。 > LIMIT 0,10としたら11件該当しなければならないのに10件しか該当しないとなり、これはこれでおかしくなります。 いや、LIMIT 0,10 なら先頭から10件で正しいですよ? 0から10まででは有りません。0から10件ですから。
補足
セレクト文のやり方がわかりません。id=2即ち二ページ目では、このセレクト文、三ページ目では、このセレクト文って指定する方法がわからないです。
- BellBell
- ベストアンサー率54% (327/598)
SQL文で SELECT COUNT(*) FROM `hoge` WHERE ~ として、データ総数を取得するのと SELECT COUNT(*) FROM `hoge` WHERE ~ LIMIT 0,10 と、実データを取得する2回に分けたらいいんじゃないですか? 100件程度なら全データを取得して、必要な10件に絞り込んでデータ表示をしても、無駄な度合いは少ないですが、10000件のデータがある場合、毎回実データを全部取得してから絞り込むのは大変な無駄ですね。 もっとも、11件実データがあるときに、1ページ目でも2ページ目でも11件表示されるって事は、そもそも絞り込みをしていないって事ではあるんでしょうが。
補足
やり方がわかりません。