分页查询之前计算总页数

1. 导言 Introduction

利用 SQL 中的 SELECT 语句查询时,如果结果集(查询结果)数据量很大,比如几万行数据,放在一个页面显示过于冗长,此时分页显示是个好的选择,比如每页显示 10 行数据(也叫 10 行记录)

要实现分页功能,本质就是从结果集中显示第 1-10 条记录作为第 1 页,第 11-20 条记录作为第 2 页,以此类推。因此,分页实际上就是从结果集中“截取”出第 M~N 条记录。这个查询可以通过LIMIT page_size OFFSET M-1 语句实现。其中,page_size = N-M+1LIMIT page_size表示最多显示 page_size 条记录, OFFSET M-1表示跳过前 M-1 条记录,显然从第1条记录开始分页就应该设置OFFSET 0

2. 分页查询 Pagination Select

假设 page_size(固定值)表示一页中显示的数据量(即一页显示多少行记录),current_record 表示当前行(即第几行记录),从当前行截取 page_size 条记录的分页公式 如下:

SELECT * FROM <table_name> LIMIT <page_size> OFFSET <current_record - 1>

OFFSET 是可选的,如果只写 LIMIT page_size,那么相当于 LIMIT page_size OFFSET 0,在 MySQL 中,LIMIT A OFFSET B还可以简写成 LIMIT B, A

按前面预热所举例,page_size=10,则:

LIMIT 10 OFFSET 0   # 显示第 1 页,即第 1~10 行记录
LIMIT 10 OFFSET 10   # 显示第 2 页,即第 11~20 行记录

3. 计算总页数 Algorithm of Total-Pages

假设 record_counts 表示总记录数(即总行数),page_counts 表示所有记录按分页显示的总页数。

显然,SELECT COUNT(*) FROME <table_name> 的结果集中 COUNT(*) 列的值即为 record_counts,那么总页数就是 record_counts / page_size 向上取整的结果。

# Python 实现
import math
import PyMySQL
"""
此处省略连接数据库从 SELECT COUNT(*) FROME <table_name> 获取 record_counts 的过程
"""
record_counts = ...
page_size = 10
page_counts = ceil( record_counts / page_size )
print(page_counts)
posted @ 2022-06-15 02:24  BodhiLeaf  阅读(1374)  评论(0)    收藏  举报