Php 最小分页数?
PHP/MySQLi中分页的最小值是多少?我在网上搜索过,试图学习如何进行分页,但所有的例子都非常多,所以我想知道最低限度是多少,这样我就可以从那里开始,然后努力理解它们 我尝试过的地方(例子并非我所看到的全部)Php 最小分页数?,php,mysqli,pagination,Php,Mysqli,Pagination,PHP/MySQLi中分页的最小值是多少?我在网上搜索过,试图学习如何进行分页,但所有的例子都非常多,所以我想知道最低限度是多少,这样我就可以从那里开始,然后努力理解它们 我尝试过的地方(例子并非我所看到的全部) 第一个非常长(看起来),但对我来说有部分意义,第二个很短,但对我来说意义不大,我还没有想到要寻找视频教程,所以我也要搜索这些教程。我们将使用$\u GET脚本中的页面信息 <? if(isset($_GET['page'])) { $page = htmlspecialchar
第一个非常长(看起来),但对我来说有部分意义,第二个很短,但对我来说意义不大,我还没有想到要寻找视频教程,所以我也要搜索这些教程。我们将使用$\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
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页
我希望上述解释有助于您对分页有一个基本的了解。分页并不是一个困难的问题,它只是一个相当复杂的问题,因此任何关于它的教程都会给您带来巨大的影响。你能链接到一些你觉得太复杂的文章/教程吗?这可能使人们更容易帮助完善他们的答案。我添加了两个例子,我看了。为什么每个人都在使用MySQL?我以为它贬值了?我说了MySQLI,所以请不要用MySQL来回答,谢谢。谢谢你试图帮助我,谢谢。我相信通过这个例子,我可以为我的网站创建自己的分页。非常感谢,这正是我想要的。没问题。很高兴我能帮上忙。。。