在动手开始设计分页功能之前,我们可以先理解一下分页功能的实现原理。在数据库客户端,打开应用的数据仓库,然后在 SQL 窗口,可以执行一段查询。SELECT post.id 还有 post.title 来自 post 这个数据表。执行一下。
得到的结果就是在 post 这个数据表里的所有的内容数据,你会发现有四条数据,打开 post 数据表,观察一下,现在我的这个数据表里也就只有四条内容数据。
在服务端如果想要分页提供内容数据,首先得在调取内容列表的查询里限制一下获取到的内容数量。
在这段查询里面,加上一个 LIMIT 限制一下获取到的内容的数量,把它的值设置成 2。再执行一下这段查询,这次查询出来的结果里面就只会出现两个数据项目。
如果想获取到其它的内容项目,可以在查询里面用 OFFSET 设置一个偏移量,比如要调取后面两个内容项目,可以把 OFFSET 的值设置成 2。 执行一下,这次查询出来的结果就是后面的两个内容项目。
这个查询里的 LIMIT 的值可以看成是在每一页里面包含的内容项目的数量,然后在查询里使用 OFFSET 可以得到对应页面上的内容项目。这个 OFFSET 的值可以用一个简单的公式算出来,用当前页码等去 1,再乘以每页的内容项目的数量,得到的值就是要在查询里设置的这个偏移量。
另外,在客户端应用里面要实现分页展示内容,除了要知道每一页的内容项目的数量,它至少还得再知道一共有多少个要展示的内容项目。
在服务端可以使用一段单独的查询给客户端统计一下它要显示的内容的数量。用 SELECT ,然后用 COUNT 统计一下 post 的 id 的个数。起个名字叫 total。
这样查询出来的结果里面有个 total 栏目,它的值就是内容的数量。