• 締切済み

limit ページング

ページングにて1週間ほど悩んでおります。 $page = $_REQUEST['page']; $range = 5; if($page > 0) { $from = (($page - 1) * $range); } else { $from = 0; } $total_result = sprintf("SELECT COUNT(id) from test_db"); $totals = mysql_query($total_result); $total_pages = ceil($totals / $range); if ($page > 1) { echo '<a href ="?page=' .($page - 1). '">< 前の' . $range. '件</a>'; } if ($total_pages > 1 && $page < $total_pages) { echo '<a href ="?page=' .($page + 1). '">次の' . $range. '件 ></a>'; } $paged_result = "SELECT * from test_db limit " .$from. " , " .$range; $paged_results = mysql_query($paged_result); foreach($paged_results as $paged) { ・ ・ ・ } と省略しておりますが、この状態でループさせると、1ページで5件表示のはずが4件しか表示されません。 また初期表示でpage=0(URLには表示はされない)は1~5件目、page=1は6~10件目を表示させたいです。 お分かりのかたがいらっしゃいましたらご教示お願いします。

みんなの回答

回答No.2

if($page > 0) { $from = (($page - 1) * $range); } else { $from = 0; } だと、 $pageが0の時、$from=0 $pageが1の時、$from=(1-1)*5→0 $pageが2の時、$from=(2-1)*5→5 になってしまいます。 本来は $page=0のとき$from=0 $page=1のとき$from=5 $page=2のとき$from=10 となるような式にするべきかと。

すると、全ての回答が全文表示されます。
  • 1minn
  • ベストアンサー率57% (52/90)
回答No.1

mysqlってことでいいんですよね。 $paged_result = "SELECT * from test_db limit " .$from. " , " .$range; この時点で$rangeが5以外入らないはずなので、データがあれば5件取れてるはずです。 最終的な出力が4件しかないのは、記載されたところ以外に問題があるのでは? というか、mysql_queryの結果ってリソースですよね? mysql_fetch_assocなりでデータを取り出すのではないのですか? http://php.net/manual/ja/function.mysql-query.php

すると、全ての回答が全文表示されます。

関連するQ&A