NodeJS Prisma查询中的分页在接近结果结尾时无法正常工作

fhity93d  于 2023-03-08  发布在  Node.js
关注(0)|答案(1)|浏览(250)

我正在使用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来实现分页可能会导致性能问题,但我不明白为什么会导致这个问题。有人能解释一下是什么导致这个问题,以及我如何解决它吗?

    • 我们将非常感谢您提供的任何帮助或指导。感谢您的时间和专业知识!**
5w9g7ksd

5w9g7ksd1#

这是所有使有意义的,在你的表有5行.对于这第一次,棱镜将跳过0并且采取10至少如此,这答案是5行.下一轮棱镜将跳过1然后这答案将是4行.你的棱镜跳过值应该是:

skip: input.pageIndex * input.paseSize

相关问题