繁体   English   中英

Rust柴油Postgres如何添加分页查询

[英]Rust diesel Postgres how to add pagination to query

我正在使用柴油连接并从 Postgres 数据库中获取数据。 我想使用分页一次将大量记录从我的数据库中提取到几条记录中。 假设我有 1000 条数据记录,我需要一次获取 20 条数据,总记录数。 下面是我的表,我使用了内部连接来获取数据。

#Emplyee table

| employee-id  | employee_name | empolyee_email|       
| -----------  | --------------|-------------  |
| 1            | ABC           |abc@mail.com   |
| 2            | xyz           |xyz@mail.com   |


# Account table

| account  | employee-id    | account-balnce | created_at|
| -------- | ----------     |--------------- |-----------|
| 1        | 1              |   2000         | 22/10/2021|
| 2        | 2              |   5000         | 01/09/2021|

我用来获取数据的查询。

let employee_account = employee::table
            .inner_join(account::table.on(employee::dsl::employee_id.eq(account::dsl::employee_id)),)
            .filter(account::dsl::employee_id.eq(employeeId))
            .load::<(Employee_Details,)>(&self.pool.get()?)?;

我探索了 Diesel 文档,发现limit ( doc ) 和offset ( doc ) 函数看起来很有希望实现分页。 请尝试在load function 之前添加这两个函数,如下所示。 用 20 初始化 page_size,用 0 初始化偏移量。循环直到没有数据返回。 为下次加载增加页面大小的偏移量。

let page_size = 20;
let mut offset = 0;

let employee_account = employee::table
            .inner_join(account::table.on(employee::dsl::employee_id.eq(account::dsl::employee_id)),)
            .filter(account::dsl::employee_id.eq(employeeId))
            .limit(page_size)
            .offset(offset)
            .load::<(Employee_Details,)>(&self.pool.get()?)?;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM