惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hugging Face - Blog
Hugging Face - Blog
Cyberwarzone
Cyberwarzone
Stack Overflow Blog
Stack Overflow Blog
V
Visual Studio Blog
F
Full Disclosure
博客园 - 三生石上(FineUI控件)
WordPress大学
WordPress大学
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
爱范儿
爱范儿
D
Docker
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
小众软件
小众软件
G
Google Developers Blog
量子位
云风的 BLOG
云风的 BLOG
有赞技术团队
有赞技术团队
P
Palo Alto Networks Blog
S
Secure Thoughts
Google DeepMind News
Google DeepMind News
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Blog — PlanetScale
Blog — PlanetScale
TaoSecurity Blog
TaoSecurity Blog
The Register - Security
The Register - Security
AWS News Blog
AWS News Blog
Know Your Adversary
Know Your Adversary
N
Netflix TechBlog - Medium
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
Security Affairs
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Spread Privacy
Spread Privacy
美团技术团队
Scott Helme
Scott Helme
Martin Fowler
Martin Fowler
I
InfoQ
T
Tor Project blog
博客园_首页
V
V2EX
A
About on SuperTechFans
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
IT之家
IT之家
Engineering at Meta
Engineering at Meta
博客园 - Franky
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
Cyber Attacks, Cyber Crime and Cyber Security
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
G
GRAHAM CLULEY
Schneier on Security
Schneier on Security
N
News and Events Feed by Topic

文章列表 - 她和她的猫

使用小鹤双拼一个月 折腾 Hugo PaperMod 主题 去长鹿旅游休博园 1Password 自动化登录堡垒机 深入 Hyperf:Inject 注解是如何工作的? 译|理解容器镜像层 使用 Rust 实现高性能预写日志(Write Ahead Log) 译|使用 Linux 命名空间隔离系统 深入 Hyperf:HTTP 服务是如何处理请求的? Linux 文件权限学习笔记 译|了解 Bitcask:基于日志结构的 KV 存储引擎 还原 SM2 压缩公钥的几种方法 深入 Hyperf:HTTP 服务启动时发生了什么? 一次 Hyperf 注解失效问题分析 将博客迁移到又拍云 译|PHP 7 新的 Hashtable 实现 排查 ES 查询问题:深入了解 json_encode() 函数 浅析 Redlock 分布式锁实现原理 Yar 源码阅读笔记:RPC 服务端 Yar 源码阅读笔记:客户端的并行调用 Yar 源码阅读笔记:客户端的同步调用 Yar 源码阅读笔记:数据传输模块 Yar 源码阅读笔记:消息编码模块 Yar 源码阅读笔记:RPC 通信协议 Yar 源码阅读笔记:开篇 PHP 8 新特性介绍 基于 OpenSSL 实现国密 SM4 加解密 PHP 源码阅读笔记:编译与调试 PHP 什么是惊群问题 大端模式和小端模式 基于 GitHub Actions 定时推送网址到百度站长平台 聊聊五种 I/O 模型 Workerman 源码分析:文件上传 浅入浅出 HTTP 协议 PHP 网络编程:构建 MySQL 蜜罐获取攻击者微信 ID 使用 Workerman 接入 Bilibili 直播弹幕协议 使用 GitHub Actions 自动部署 Hexo 什么是二进制安全 【转载】PHP 程序员进阶之路 优化 Workerman 检查主进程是否存活的逻辑 基于 Redis 实现分布式锁 《PHP 实现 Base64 编码/解码》笔记 PHP 多进程下载必应壁纸 基于 Redis 实现延迟队列 【转载】PHP 实现 Base64 编码/解码 使用 MySQL FIELD() 函数自定义排序规则 Laravel 的 Facades 实现原理 C语言单链表实现约瑟夫环 数据结构学习笔记:顺序栈和链栈(C语言) 使用 QueryList + Redis 下载壁纸 在 Laravel 登录/注册中使用 mews/captcha 扩展包 使用 mews/captcha 扩展包为 Laravel 应用添加图片验证码 给 YOURLS 短网址系统编写插件《批量生成短网址》 给 YOURLS 短网址系统编写插件《Hello World!》 PHP 7.1 使用 json_encode 函数造成浮点类型数据出现精度问题 Laravel 授权策略(Policy)的基本使用 Ubuntu 系统下 WiFi 频繁掉线解决方法 Laravel 应用部署到 Nginx 服务器上的第一个坑 Ubuntu 16.04 LST 安装 Redis 和 Composer PHP 采集逐浪小说章节列表 Nginx 环境 SSL 强制 HTTP 301 跳转到 HTTPS 【工作&生活】第一周 ServiceStack.Redis 与多线程 Count the number of Duplicates C# Base64 加密及解密 ASP.NET MVC 使用动态类型传递数据 Django 使用 order_by() 对数据进行排序操作 ASP.NET + jQuery + AJAX 实现用户登录 ASP.NET 从客户端中检测到有潜在危险的 Request.Form 值 ASP.NET 使用 FormData 实现 AJAX 上传图片 Python 使用 BeautifulSoup 抓取网页 贪心算法之字符串的完美度 一言不和就造轮子之 CookieHelper ASP.NET 上传图片 DBHelper 类 C# 捕获屏幕源码 用 JavaScript 做一些有趣的事情 第一篇文章 好久不见。 如何防止非法调用 PHP 文件 清明小记。 PHP 生成随机字符串 Z-Blog PHP 程序做 301 跳转 PHP 处理数组常用的几个函数 Sublime Text 3 快捷键总结 PHP 使用 file_get_contents() 函数实现采集网页 使用 C# 编写学生信息管理系统 终于到了。 zblog报错: magic_quotes_gpc 和 safe_mode 世事无常。 如何使用 PHP 上传文件 安卓手机编写和运行 PHP 程序的软件 使用 AJAX 刷新、验证 PHP 图片验证码 PHP 生成图片验证码 PHP 之 session 的使用方法 PHP 之 cookie 的使用方法 Thinkphp 框架中系统常量在 Js 文件中不解析的解决方法
PHP 实现分页原理详解
她和她的猫 · 2016-01-28 · via 文章列表 - 她和她的猫

分页在网站上面是一个必不可少的东西,例如在论坛上,只有几十张帖子那很好办,在一页显示就可以了,可是如果论坛有几千甚至几十万帖子的话,如果都在一页显示的话无论对浏览器还是用户都是一种折磨,而且如果数据上亿,从数据库里查询一次的话,对服务器的压力是很大的。所以就有了分页这个东西,接下来给大家讲一下如何实现分页。

假设我们有 100 条数据,要在每页中显示 10 条,这样的话就会分 10 页来显示,我们先看一看在 MySQL 里提取 10 条数据是如何操作的。

mysql_query("SELECT * FROM `article`  LIMIT 0, 10");

上面是一条很简单的数据库查询语句,它的意思就是从名叫 “article” 的表里面提取 10 条数据,细心的朋友可能已经知道了,这条查询语句最关键的就是 limt 0, 10。为了让你们更容易理解,我用 a 和 b 替换掉 0 和 10。limit a, b 就是从第a条记录开始,取出 b 条数据,a 表示从哪里开始取出数据,b 表示取多少条,也就是限定条件,限定他只能取多少条。假如一页显示 10 条数据,那么 b 就是 10,一页显示 20 条数据,b 就是 20。

看几个例子:

Limit 0,10        //第一页
Limit 10,10       //第二页
Limit 20,10       //第三页
Limit 30,10       //第四页

看出什么规律了吗?没错,每翻一页,第一个参数加 10,而第二个参数一直不变。

可能有人就会问,为什么第一个参数会变,而第二个参数不变呢?上面已经说过了,第一个参数表示从哪里开始,每翻一页加 10,这 10 条数据在上一页已经显示过了,所以就要加 10 从它的后面开始取出这一页数据。第二个参数因为我们要每一页都只显示 10 条数据,所以第二个数值一直不变。

也就是说,只要我们改变第一个参数的值就可以实现分页了,那我们要怎么改变呢?没错,用url的GET方式获取页数。例如 index.php?page=5 相信大家对这种url不陌生吧?可以说随处可见,其中的 page 参数就是要显示的页数。

看一小段代码:

$page = $_GET['page'];// 接受url中的page参数
if($page == ""){
    $page = 1;    //如果page不存在,那么页数就是1;
}
$page_size = 10;    //每页显示10条数据,也就是第二个参数

现在我们要获取数据库中到底有多少条数据,才能判断要分多少页,

具体的公式:总数据条数 除以 每页显示的条数等于总页数,也就是说 100/10=10,还有一种情况有余数, 10/3=3.3333 有余数存在总页数就要加1,所以总页数为4 。

计算页数代码:

$total = mysql_num_rows(mysql_query("SELECT * FROM `article`")); //查询总共有多少条数据
$page_num = ceil($total / $page_size);      //获得总页数 ( 总数据条数 除以 每页显示的条数 )
$offset = ($page - 1) * $page_size;    // 获取limit第一个参数 (传入的页数-1) * 每页显示的条数
//假如第一页则为(1-1)*10=0,第二页为(2-1)*10=10
$info = mysql_query("SELECT * FROM `article` limit $offset, $page_size");   //获取相应页数所需要显示的数据

还有最后一步,显示分页信息,代码部分:

if ($page > 1) {
    echo '« 上页 ';
}
for ($i = 1; $i <= $page_num; $i++) {
    if ($i == $page) {
        echo '' . $i . ' ';
        continue;
    }
    echo '' . $i . ' ';
}
if ($page < $page_num) {
    echo '下页 » ';
}

这是一篇过去很久的文章,其中的信息可能已经有所发展或是发生改变。