Rust diesel Postgres 如何添加分页查询
Rust diesel Postgres how to add pagination to query
我正在使用 diesel 连接 Postgres 数据库并从中获取数据。我想使用分页从我的数据库中一次获取大量记录到几条记录中。假设我有 1000 条数据记录,我需要一次获取 20 条记录总数的数据。下面是我的 table 并且我使用了内部连接来获取数据。
#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) and offset
(doc) 函数看起来很有希望实现分页。请尝试在 load
函数之前添加这两个函数,如下所示。初始化page_size为20,偏移为0。循环直到没有数据returns。按页面大小增加偏移量以加载下一页。
let page_size = 20;
let mut offset = 0;
loop {
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()?)?;
if employee_account.len() <= 0 { break;}
offset += page_size;
}
我正在使用 diesel 连接 Postgres 数据库并从中获取数据。我想使用分页从我的数据库中一次获取大量记录到几条记录中。假设我有 1000 条数据记录,我需要一次获取 20 条记录总数的数据。下面是我的 table 并且我使用了内部连接来获取数据。
#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) and offset
(doc) 函数看起来很有希望实现分页。请尝试在 load
函数之前添加这两个函数,如下所示。初始化page_size为20,偏移为0。循环直到没有数据returns。按页面大小增加偏移量以加载下一页。
let page_size = 20;
let mut offset = 0;
loop {
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()?)?;
if employee_account.len() <= 0 { break;}
offset += page_size;
}