• 締切済み

ページング。困っています。

分かる方はいませんか?? <?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)."\">&lt; PREV</a>"; }else{ $startPage=1; } if($id+5<$maxPage){ $endPage=$id+5; $endMore=" <a href=\"$PHP_SELF?id=".($endPage+1)."\">NEXT &gt;</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件しか該当しないとなり、これはこれでおかしくなります。

みんなの回答

  • edomin7777
  • ベストアンサー率40% (711/1750)
回答No.5

> $search_query = 'select * from ilab where LIMIT ' . ($_GET['id']-1)*10,10 . ''; > こうですかね?? なんで、やってみないの? まあ、やってみても「,10」が外に出てるから動かないとは思うけど…。

drmada
質問者

補足

やり方がわかりません。

  • edomin7777
  • ベストアンサー率40% (711/1750)
回答No.3

#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件づつ抽出できると思いませんか?

drmada
質問者

補足

$search_query = 'select * from ilab where LIMIT ' . ($_GET['id']-1)*10,10 . ''; こうですかね??

  • edomin7777
  • ベストアンサー率40% (711/1750)
回答No.2

まずは、どうやってSELECT文を記載しているか示した方が速いと思います。 > LIMIT 0,10としたら11件該当しなければならないのに10件しか該当しないとなり、これはこれでおかしくなります。 いや、LIMIT 0,10 なら先頭から10件で正しいですよ? 0から10まででは有りません。0から10件ですから。

drmada
質問者

補足

セレクト文のやり方がわかりません。id=2即ち二ページ目では、このセレクト文、三ページ目では、このセレクト文って指定する方法がわからないです。

  • BellBell
  • ベストアンサー率54% (327/598)
回答No.1

SQL文で SELECT COUNT(*) FROM `hoge` WHERE ~ として、データ総数を取得するのと SELECT COUNT(*) FROM `hoge` WHERE ~ LIMIT 0,10 と、実データを取得する2回に分けたらいいんじゃないですか? 100件程度なら全データを取得して、必要な10件に絞り込んでデータ表示をしても、無駄な度合いは少ないですが、10000件のデータがある場合、毎回実データを全部取得してから絞り込むのは大変な無駄ですね。 もっとも、11件実データがあるときに、1ページ目でも2ページ目でも11件表示されるって事は、そもそも絞り込みをしていないって事ではあるんでしょうが。

関連するQ&A