0

テーブルから 20 レコードだけを選択し、ページネーションを追加して 1 ページあたり 5 レコードを表示する必要があります。ページネーションで LIMIT が使用されていることは知っていますが、最初に 20 レコードを取得し、それらの 20 レコードにページネーションを追加する必要があります

4

4 に答える 4

1

やり方の基本的な考え方をお伝えします。

1) テーブルに多数の行があることを確認します (単純 -

SELECT COUNT(*) 
In your case it is 20.

2) 表示したいページあたりの行数に基づいて、表示するページ数を見つけます。

 intPages = ceil(intTotalRecords / 8 ) 

したがって、すべての浮動小数点は ceil() されます。つまり、この除算が値 9.5 を生成する場合、10 がページ数と見なされます。

3) 現在のページを見つけます。4)クエリに送信される制限とオフセット(ページ番号に応じて)を見つけます。次の行の何か。

intLimit = 8;
intOffset = (intCurrentPage - 1) * intRowsPerPage;

5) 現在のページの行を引き出します
。 6) 情報を表示します。(ページネーションリンクもループオーバーします)

前/次のページが 1 または最大ページ数を超えているかどうかを確認し、それにintCurrentPage応じて値を設定する必要があります。

UPDATE : テーブルからレコードの最後の 20 ブロックを取得します。

SELECT <column_names> FROM <table_name>
<optional_where_clause_goes_here>
ORDER BY <primary_autoincrement_id_field> DESC
LIMIT 20;

また

SELECT <column_names> FROM <table_name>
WHERE <certain_conditions_here> 
and <primary_autoincrement_id_field> >= (select max(<primary_autoincrement_id_field>) from <table_name>) - 20

私が投稿した上記の各クエリには依存関係があり、フィールド<primary_autoincrement_id_field>は auto_increment である必要があります。

于 2012-06-19T06:40:37.220 に答える
1

一度に 20 レコードを選択し、array_sliceを使用してページネーションを行うことができます。

編集: なぜ 2 つの LIMITS があるのですか? 制限は次のようになります。

1st page: LIMIT 0, 5
2nd page: LIMIT 5, 5
3rd page: LIMIT 10, 5
4th page: LIMIT 15, 5
于 2012-06-19T06:33:19.670 に答える
0

2 つのクエリを使用します。1 つはレコードの合計数を取得するためのものです (カウントを含む 1 つの行のみが返されます)。その後、LIMIT を使用してページネーションを選択します。

于 2012-06-19T06:33:57.303 に答える
0

最初にテーブルから合計数を取得し、この関数 pagination を呼び出して配列を返します

 $array = pagination(200000);

そして、次のようなクエリを書くことができます

 $query = "SELECT * FROM your_table ".$array['querylimit'];

また、ページネーションに他の配列 indexex を使用することもできます。

function pagination($totalRows, $perPage = 20){
        $page = (isset($_POST['pagination']['page'])) ? intval($_POST['pagination']['page']) : 0;


        $perPage = intval($perPage);

        if($perPage == 0){
            $perPage = 20;
        }

        if(intval($page) < 0){
            $page = 1;
        }

        if (ceil($totalRows / $perPage) < intval($page)){
            $page = ceil($totalRows / $perPage);
        }

        if (!$page){
            $page = 1;
        }
        $prev = $page - 1;
        $next = $page + 1;


        if(intval($prev) < 0){
            $prev = 1;
        }


        $min = (($page - 1) * $perPage);

        if(ceil($totalRows / $perPage) < $next){
            $next = 0;
        }

        $end = $min+$perPage;
        if($end > $totalRows){
            $end = $totalRows;
        }
        $start = $min+1;
        $return['showing'] = "$start-$end of $totalRows";
        $return['querylimit'] = " LIMIT $min, $perPage";
        $return['next'] = $next;
        $return['prev'] = $prev;
        return $return;
    }
于 2012-06-19T06:45:54.163 に答える