thinkphp 使用原生sql分页
时间: 2023-09-17 16:08:48 浏览: 264
在 ThinkPHP 中使用原生 SQL 分页,可以使用 `paginate()` 方法的第二个参数来实现。具体步骤如下:
1. 编写原生 SQL 查询语句,例如:
```
$sql = "SELECT * FROM `user` WHERE `status`=1 ORDER BY `create_time` DESC";
```
2. 获取当前页码和每页显示数量,例如:
```
$page = input('page', 1, 'intval');
$pageSize = input('pageSize', 10, 'intval');
```
3. 计算查询起始位置,例如:
```
$offset = ($page - 1) * $pageSize;
```
4. 拼接分页 SQL 语句,例如:
```
$sql .= " LIMIT $offset, $pageSize";
```
5. 执行 SQL 查询,例如:
```
$list = Db::query($sql);
```
6. 统计总记录数,例如:
```
$countSql = "SELECT COUNT(*) FROM `user` WHERE `status`=1";
$count = Db::query($countSql)[0]['COUNT(*)'];
```
7. 使用 `$count` 和 `$pageSize` 计算总页数,例如:
```
$totalPage = ceil($count / $pageSize);
```
8. 构建分页数据,例如:
```
$data = [
'list' => $list,
'total' => $count,
'page' => $page,
'pageSize' => $pageSize,
'totalPage' => $totalPage,
];
```
这样就可以使用原生 SQL 分页查询数据了。需要注意的是,原生 SQL 分页查询需要手动计算分页信息,较为繁琐,不如使用 `paginate()` 方法方便。
阅读全文