多数据库查询数据列表分页
概述: 在后台管理系统中,列表数据的展示有可能来自多个数据源,列表页需要支持分页
这边有两种方案:
- 多个数据源的数据定时同步到某一个数据源A中,列表显示的数据就从数据源A中进行分页查询
- 内存中分页,首先将查询的数据存放到内存,然后再进行查询分页
定时同步到数据源A方案
将多个数据源的数据根据具体的时间进行迁移,同步到Mysql/MongoDB…具体位置根据实际开发决定
内存中分页方案
$data = [
0 => ['name' => "姓名1", 'age' => "年龄1"],
1 => ['name' => "姓名2", 'age' => "年龄2"],
2 => ['name' => "姓名3", 'age' => "年龄3"],
3 => ['name' => "姓名4", 'age' => "年龄4"],
4 => ['name' => "姓名5", 'age' => "年龄5"],
5 => ['name' => "姓名6", 'age' => "年龄6"],
6 => ['name' => "姓名7", 'age' => "年龄7"],
7 => ['name' => "姓名8", 'age' => "年龄8"],
8 => ['name' => "姓名9", 'age' => "年龄9"],
9 => ['name' => "姓名10", 'age' => "年龄10"],
];
/**
* 数组分页
* @param array $arrayData 数组数据
* @param int $page 第几页
* @param int $pageSize 每页展示条数
* @return array
*/
function arrayToPageData($arrayData = [], $page = 1, $pageSize = 10)
{
$arrayData = array_values((array)$arrayData);
$pageData['list'] = array_slice($arrayData, ($page - 1) * $pageSize, $pageSize);
$pageData['pagination']['total'] = count($arrayData);
$pageData['pagination']['currentPage'] = $page;
$pageData['pagination']['prePageCount'] = $pageSize;
return $pageData;
}
echo json_encode(arrayToPageData($data, 2, 3));
输出
{
"list": [
{
"name": "姓名4",
"age": "年龄4"
},
{
"name": "姓名5",
"age": "年龄5"
},
{
"name": "姓名6",
"age": "年龄6"
}
],
"pagination": {
"total": 10,
"currentPage": 2,
"prePageCount": 3
}
}
https://juejin.im/post/5e6f01dbf265da5752095a6d