You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Prisma中查询1-N关联最新记录满足指定条件的用户?

解决方案

方式1:Prisma常规查询+应用层过滤(易维护,适合中小数据量)

直接通过Prisma标准语法查询,在应用层做最终过滤,写法简单易维护:

// 查询所有有投诉的用户,同时关联获取每个用户最新的1条投诉
const usersWithLatestComplaint = await prisma.user.findMany({
  where: {
    complaints: {
      some: {} // 过滤无投诉的用户,匹配规则3
    }
  },
  include: {
    complaints: {
      orderBy: { creationTime: 'desc' },
      take: 1 // 仅取最新1条投诉
    }
  }
})

// 过滤出最新投诉优先级为HIGH的用户,匹配规则1、2
const targetUsers = usersWithLatestComplaint.filter(user => {
  return user.complaints[0].priority === 'HIGH'
})

方式2:原生SQL查询(性能更高,适合大数据量)

直接通过数据库窗口函数在查询层完成所有过滤,不需要应用层二次处理,性能更优:

const targetUsers = await prisma.$queryRaw`
  SELECT u.*
  FROM users u
  INNER JOIN (
    SELECT 
      user_id,
      priority,
      ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY creation_time DESC) AS rn
    FROM complaints
  ) c ON u.id = c.user_id
  WHERE c.rn = 1 AND c.priority = 'HIGH'
`

备注:如果你的Prisma Schema自定义了数据库表名、字段名映射,需要对应调整SQL语句中的表名和字段名。


补充说明

目前Prisma官方暂未支持直接在关联查询的where条件中筛选「最新关联记录满足指定条件」的语法,上述两种是当前最通用的实现方案,可以根据业务数据规模选择。

内容的提问来源于stack exchange,提问作者Raffaele

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 04:24:04