Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 最小分页数?_Php_Mysqli_Pagination - Fatal编程技术网

Php 最小分页数?

Php 最小分页数?,php,mysqli,pagination,Php,Mysqli,Pagination,PHP/MySQLi中分页的最小值是多少?我在网上搜索过,试图学习如何进行分页,但所有的例子都非常多,所以我想知道最低限度是多少,这样我就可以从那里开始,然后努力理解它们 我尝试过的地方(例子并非我所看到的全部) 第一个非常长(看起来),但对我来说有部分意义,第二个很短,但对我来说意义不大,我还没有想到要寻找视频教程,所以我也要搜索这些教程。我们将使用$\u GET脚本中的页面信息 <? if(isset($_GET['page'])) { $page = htmlspecialchar

PHP/MySQLi中分页的最小值是多少?我在网上搜索过,试图学习如何进行分页,但所有的例子都非常多,所以我想知道最低限度是多少,这样我就可以从那里开始,然后努力理解它们

我尝试过的地方(例子并非我所看到的全部)


第一个非常长(看起来),但对我来说有部分意义,第二个很短,但对我来说意义不大,我还没有想到要寻找视频教程,所以我也要搜索这些教程。

我们将使用$\u GET脚本中的页面信息

<?
if(isset($_GET['page'])) {
 $page = htmlspecialchars(mysql_real_escape_string($_GET['page']));
}
else {
 $page = 1; //We'll assume that if the $_GET isn't present, the first page will be shown.
}
$perpage = 25; //Number of items per page
$first = (($page-1)*$perpage); //Basically gets the first row of the page.
$q = mysql_query("SELECT * FROM table ORDER BY id ASC LIMIT $first, $perpage");
while($row = mysql_fetch_array($q)) {
//Put your output here
}

//Now, we can put our page navigator

$i = 1;
$count = mysql_num_rows(mysql_query("SELECT `id` FROM table"));
$num = ceil($count/$perpage);
while($i <= $num) {
echo "<a href='/page/".$i."'>".$i."</a> ";
$i++;
?>

事实上,数据库与分页算法没有多大关系。无论使用哪个数据库或数据库驱动程序,或者即使根本不涉及任何数据库,都是相同的

正如您将在下面看到的,数据库操作只需要2次调用,使用(尽管您可以使用任何您喜欢的方式)。
从数据库中,我们需要数据本身和记录总数

为了获得这些,我们将使用两个MySQL特性:

  • SQL\u CALC\u FOUND\u ROWS
    /
    FOUND\u ROWS()
    获取总行数
  • LIMIT
    子句来限制所选数据量
要显示指向页面的链接,您需要知道当前页面和总页数

<?php
include 'safemysql.class.php';
$db = new safeMysql();

$per_page = 10;

//let's get the page number
$cur_page = 1;
if (isset($_GET['page']) && $_GET['page'] > 0) 
{
    $cur_page = $_GET['page'];
}

// then define starting record
$start = ($cur_page - 1) * $per_page;

//now let's get the data and total number of rows
$sql  = "SELECT SQL_CALC_FOUND_ROWS * FROM Board LIMIT ?i, ?i";
$data = $db->getAll($sql, $start, $per_page);
$rows = $db->getOne("SELECT FOUND_ROWS()");

//and total number of pages.
$num_pages = ceil($rows / $per_page);

//we have to define this variable to display list of pages
$page = 0;
include 'template.tpl.php';


.

页:

但是,这实际上是最低限度的,不包括减少显示的页面数量和支持其他WHERE参数等基本部分。

分页相对简单,我将尝试以最简单的方式来描述它

首先,这里有5个术语或短语(或参数),您将在大多数分页场景中遇到它们:

  • 限制(或每页的结果)
  • 偏移量(结果/记录集的起始位置)
  • 当前页
  • 总结果
  • 页数
以下面的查询为例:

SELECT * FROM products WHERE active = 1 LIMIT 0 , 25
在上面的SQL中(它应该适用于mysqli):

  • 25=>是限制(或每页的结果)
  • 0=>是偏移量(即从结果或记录0开始)
也就是说

give me the results 0 - 24, i.e. the first 25 results
give me the results 25 - 49, i.e. the next 25 results starting from record 25
因此,假设您有一个包含1000条记录的产品表,并且您需要在每页仅显示25条记录的网页上显示这些记录:在您的第一页上,这些将是上述5个术语的值:

  • 限制(每页结果)=>25
  • 偏移量=>0
  • 当前页面=>1
  • 总结果=>1000
  • 页数=>总结果/限制=>40
通常,偏移量是根据当前页面和限制动态计算的,因此对于产品结果的第1页,偏移量将等于:

offset = (current page * limit) - limit
i.e. (1 * 25) - 25 = 0
因此,您的mysqli查询将是:

SELECT * FROM products WHERE active = 1 LIMIT [OFFSET] , [LIMIT]

i.e. SELECT * FROM products WHERE active = 1 LIMIT 0 , 25
offset = (current page * limit) - limit
i.e. (2 * 25) - 25 = 25
SELECT * FROM products WHERE active = 1 LIMIT [OFFSET] , [LIMIT]

i.e. SELECT * FROM products WHERE active = 1 LIMIT 25 , 25
使用与产品结果第2页相同的原则,偏移量(或起始结果)将为:

SELECT * FROM products WHERE active = 1 LIMIT [OFFSET] , [LIMIT]

i.e. SELECT * FROM products WHERE active = 1 LIMIT 0 , 25
offset = (current page * limit) - limit
i.e. (2 * 25) - 25 = 25
SELECT * FROM products WHERE active = 1 LIMIT [OFFSET] , [LIMIT]

i.e. SELECT * FROM products WHERE active = 1 LIMIT 25 , 25
因此,您的mysqli查询将是:

SELECT * FROM products WHERE active = 1 LIMIT [OFFSET] , [LIMIT]

i.e. SELECT * FROM products WHERE active = 1 LIMIT 0 , 25
offset = (current page * limit) - limit
i.e. (2 * 25) - 25 = 25
SELECT * FROM products WHERE active = 1 LIMIT [OFFSET] , [LIMIT]

i.e. SELECT * FROM products WHERE active = 1 LIMIT 25 , 25
也就是说

give me the results 0 - 24, i.e. the first 25 results
give me the results 25 - 49, i.e. the next 25 results starting from record 25
其他术语将具有以下值:

  • 限制(或每页结果)=>25
  • 当前页面=>2
  • 总结果=>1000
  • 页数=>40页
在分页的大多数简单用例中,唯一更改的参数是偏移量和当前页面。如果在查询中引入过滤器,那么除了前2个之外,总结果和页数也会发生变化


我希望上述解释有助于您对分页有一个基本的了解。

分页并不是一个困难的问题,它只是一个相当复杂的问题,因此任何关于它的教程都会给您带来巨大的影响。你能链接到一些你觉得太复杂的文章/教程吗?这可能使人们更容易帮助完善他们的答案。我添加了两个例子,我看了。为什么每个人都在使用MySQL?我以为它贬值了?我说了MySQLI,所以请不要用MySQL来回答,谢谢。谢谢你试图帮助我,谢谢。我相信通过这个例子,我可以为我的网站创建自己的分页。非常感谢,这正是我想要的。没问题。很高兴我能帮上忙。。。