我正在使用Prisma
来查询PostgreSQL
数据库并实现分页,但是,我遇到了一个问题,分页似乎在接近结果末尾时无法正常工作。
下面是我用作参考的查询:
get: protectedProcedure
.input(
z.object({
pageSize: z.number().min(1).max(100),
pageIndex: z.number().min(0),
})
)
.query(async ({ input, ctx }) => {
return await prisma.subscription.findMany({
where: {
clients: {
user_email: ctx.session.user.email,
},
},
include: {
lines: {
select: {
phone_number: true,
sim_number: true,
sim_status: true,
},
},
},
take: input.pageSize,
skip: input.pageIndex,
});
}),
- 问题**我遇到的问题是,当我接近数据集的结尾时,页面大小开始每一页减少1,直到最后一页仅显示1条记录。我已仔细检查传递给查询的值是否正确,因此我不确定导致此问题的原因。
示例
对于包含15个结果的数据集,我将pageSize
设置为10,并使用以下偏移:
- 当
pageIndex
设置为0时,我期望看到前10个结果。 - 当
pageIndex
设置为1时,我期望看到最后5个结果。
不过,这是我实际得到的:
- 当
pageIndex
设置为0时,我得到了前5个结果。 - 当
pageIndex
设置为1时,我得到了接下来的4个结果。 - 当
pageIndex
设置为2时,我得到了接下来的3个结果。 - 当
pageIndex
设置为3时,我得到了接下来的2个结果。 - 当
pageIndex
设置为4时,我得到了下一个1结果。
随着我越来越接近数据集的末尾,分页似乎减少了每页返回的结果数。
我读到过使用skip来实现分页可能会导致性能问题,但我不明白为什么会导致这个问题。有人能解释一下是什么导致这个问题,以及我如何解决它吗?
- 我们将非常感谢您提供的任何帮助或指导。感谢您的时间和专业知识!**
1条答案
按热度按时间5w9g7ksd1#
这是所有使有意义的,在你的表有5行.对于这第一次,棱镜将跳过0并且采取10至少如此,这答案是5行.下一轮棱镜将跳过1然后这答案将是4行.你的棱镜跳过值应该是: