0

我只需要从表中选择 20 条记录,然后添加分页以每页显示 5 条记录。我知道在分页中使用了 LIMIT,但首先我需要获取 20 条记录,然后将分页添加到这 20 条记录中

4

4 回答 4

1

您可以一次选择20条记录,然后使用array_slice进行分页。

编辑: 为什么有 2 个限制?限制应该是:

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 回答
1

我会给你一个关于如何去做的基本想法。

1)找出你的表中有很多行(简单 -

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

2) 根据每页要显示的行数,找出要显示的页面数。

 intPages = ceil(intTotalRecords / 8 ) 

所以所有的浮点数都将被 ceil()ed 表示如果这个除法产生值 9.5,那么 10 将被视为页数。

3) 找出您所在的当前页面。4)找出要发送到您的查询的限制和偏移量(取决于页码)。以下几行内容。

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

5) 拉出当前页面的行
6) 显示信息。(分页链接也通过循环它们)

您需要检查上一页/下一页是否超过 1 或您拥有的最大页数并intCurrentPage相应地设置值。

更新:从您的表中获取最后 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 回答
0

使用两个查询。一个获取记录的总数(它将只返回一行,包含计数)。之后使用 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 回答