2011-03-04 10 views
-1

特定の条件に一致する一連の行を出力するSQLクエリがあります。私はこのプロセスにページネーションを追加して、使いやすくしています。PHPのページネーションを追加する

私のプロセスは次のようである:このページの下限うち

  • 図は、このページの上限を把握
  • プル(例1 - - 20、21 40、など。) MySQLのテーブルからそれらの行
  • 一覧それらの行
  • 20以上がある場合、floor($totalRows/20)ページ
  • を追加???
  • ページネーション

マイページネーションは半正常に動作しているようだが、最後のページには、(それが何であれ)それが必要行の量より1少ない示しています。ここに私のコード:

$page = $_GET["p"]; 
    $bL = (($page - 1) * 20) + 1; 
    $tL = $page * 20; 

    $total = mysql_num_rows(mysql_query("SELECT id FROM coupons WHERE zone = '$zone' AND dateExp > CURDATE()")); 

    if($tL > $total) 
    { 
     $tL = (($page - 1) * 20) + ($total % 20); 
    } 

    $gotRows = "SELECT * FROM coupons WHERE zone = '$zone' AND dateExp > CURDATE() ORDER BY retailerName LIMIT " . $bL . ", " . $tL; 

    //list all those rows 

    $numPages = floor($total/20) + 1; 
    echo "<p id='results'>" . $total . " result" . $plural . " &#183; Displaying " . $bL . " to " . $tL . " </p>"; 
    echo "</table>"; 
    $pG = 1; 
    while($pG <= $numPages) 
    { 
     if($pG == $page) 
     { 
      echo $pG; 
     } 
     else 
     { 
      echo "<a href='zone?z=" . $zone . "&p=" . $pG . "'>" . $pG . "</a>"; 
     } 
     if($pG != $numPages) 
     { 
      echo "&#183"; 
     } 
     $pG = $pG + 1; 
    } 

何か助けてください?

編集:私は問題を解決しませんでした。しかし、間違っている下のページリンクに関する私の問題は依然として持続しています。 1ページ目は正常に動作します。「1」はリンクではなく「2」です。ただし、ページ2では、リンクとして「1」のみが表示されます。 「2」は表示されません。

+0

PHP/MySQLページネーションを扱っているので、たくさんの質問があります。既に見てきましたか? – drudge

+0

ページネーションがうまくいきました - 私はページリンクのバグを修正しようとしています。 – AKor

答えて

1

このロジックは私を混乱させます。 $tlが合計よりも大きい場合、それは単純に合計と等しくないでしょうか?

if($tL > $total) 
{ 
    $tL = (($page - 1) * 20) + ($total % 20); 
} 

代わりになぜ:また

$tL = ($tL > $total) ? $total : $tl; 

、私の代わりにmysql_num_rowsのあなたの合計を見つけるためにSQLを使用します。もう少し信頼性の高いものになるはずです(特に、本当に古いmysql拡張の使用を止めた場合)。たぶん、正しい合計を返します。

SELECT COUNT(id) FROM coupons WHERE zone = '$zone' AND dateExp > CURDATE() 

これ以外にも、誤った行数を説明する明白なものはありません。

+0

私はそれらを変更しました。この質問を提出した直後、私は行がうまく機能しました。今私の唯一の問題は、ページリンクを生成するループが不適切に動作していることです。 – AKor

関連する問題