我只需要从表中选择 20 条记录,然后添加分页
以每页显示 5 条记录。 我知道在分页中使用了 LIMIT,但首先我需要获取 20 条记录,然后向这 20 条记录添加分页
您可以一次选择 20 条记录,然后使用 array_slice 进行分页。
编辑: 为什么有 2 个限制?限制应如下所示:
1st page: LIMIT 0, 5
2nd page: LIMIT 5, 5
3rd page: LIMIT 10, 5
4th page: LIMIT 15, 5
我会给你一个关于如何去做的基本想法。
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
我发布的上述每个查询都有一个依赖项,这是应该auto_increment <primary_autoincrement_id_field>
字段。
使用两个查询。一个用于获取记录总数(它将只返回一行,包含计数)。之后,使用 限制 选择分页。
首先从表中获取总数并调用此函数分页,它将返回一个数组
$array = pagination(200000);
你可以写这样的查询
$query = "SELECT * FROM your_table ".$array['querylimit'];
您也可以使用其他数组索引进行分页。
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;
}