We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
在我们做数据查询的时候,如果数据量很大,比如几万条数据,放在一个页面显示的话显然不友好,这时候就需要采用分页显示的形式,如每次只显示10条数据
要实现分页功能,实际上就是从结果集中显示第110条记录作为第1页,显示第1120条记录作为第2页,以此类推
因此,分页实际上就是从结果集中截取出第M~N条记录
前端实现分页功能,需要后端返回必要的数据,如总的页数,总的数据量,当前页,当前的数据
{ "totalCount": 1836, // 总的条数 "totalPages": 92, // 总页数 "currentPage": 1 // 当前页数 "data": [ // 当前页的数据 { ... } ]
后端采用mysql作为数据的持久性存储
mysql
前端向后端发送目标的页码page以及每页显示数据的数量pageSize,默认情况每次取10条数据,则每一条数据的起始位置start为:
page
pageSize
start
const start = (page - 1) * pageSize
当确定了limit和start的值后,就能够确定SQL语句:
limit
SQL
const sql = `SELECT * FROM record limit ${pageSize} OFFSET ${start};`
上诉SQL语句表达的意思为:截取从start到start+pageSize之间(左闭右开)的数据
start+pageSize
关于查询数据总数的SQL语句为,record为表名:
record
SELECT COUNT(*) FROM record
因此后端的处理逻辑为:
代码如下所示:
router.all('/api', function (req, res, next) { var param = ''; // 获取参数 if (req.method == "POST") { param = req.body; } else { param = req.query || req.params; } if (param.page == '' || param.page == null || param.page == undefined) { res.end(JSON.stringify({ msg: '请传入参数page', status: '102' })); return; } const pageSize = param.pageSize || 10; const start = (param.page - 1) * pageSize; const sql = `SELECT * FROM record limit ${pageSize} OFFSET ${start};` pool.getConnection(function (err, connection) { if (err) throw err; connection.query(sql, function (err, results) { connection.release(); if (err) { throw err } else { // 计算总页数 var allCount = results[0][0]['COUNT(*)']; var allPage = parseInt(allCount) / 20; var pageStr = allPage.toString(); // 不能被整除 if (pageStr.indexOf('.') > 0) { allPage = parseInt(pageStr.split('.')[0]) + 1; } var list = results[1]; res.end(JSON.stringify({ msg: '操作成功', status: '200', totalPages: allPage, currentPage: param.page, totalCount: allCount, data: list })); } }) }) });
The text was updated successfully, but these errors were encountered:
No branches or pull requests
一、是什么
在我们做数据查询的时候,如果数据量很大,比如几万条数据,放在一个页面显示的话显然不友好,这时候就需要采用分页显示的形式,如每次只显示10条数据
要实现分页功能,实际上就是从结果集中显示第1
10条记录作为第1页,显示第1120条记录作为第2页,以此类推因此,分页实际上就是从结果集中截取出第M~N条记录
二、如何实现
前端实现分页功能,需要后端返回必要的数据,如总的页数,总的数据量,当前页,当前的数据
后端采用
mysql
作为数据的持久性存储前端向后端发送目标的页码
page
以及每页显示数据的数量pageSize
,默认情况每次取10条数据,则每一条数据的起始位置start
为:当确定了
limit
和start
的值后,就能够确定SQL
语句:上诉SQL语句表达的意思为:截取从
start
到start+pageSize
之间(左闭右开)的数据关于查询数据总数的SQL语句为,
record
为表名:因此后端的处理逻辑为:
代码如下所示:
参考文献
The text was updated successfully, but these errors were encountered: