查询以获取按关系中的项目数排序的数据
Posted
技术标签:
【中文标题】查询以获取按关系中的项目数排序的数据【英文标题】:Query to get data ordered by the number of items in a relation 【发布时间】:2019-05-06 15:04:25 【问题描述】:假设我有这个典型的数据模型,在许多教程中都使用过:
type User
id: ID! @unique
name: String!
posts: [Post!]!
type Post
id: ID! @unique
title: String!
content: String!
published: Boolean! @default(value: "false")
author: User!
我可以构建一个查询来获取一个列表,比如说,有更多帖子的 10 个用户? 基本上我需要通过帖子的“计数”来查询排序……但我还没有找到方法
我们将不胜感激任何帮助
干杯
【问题讨论】:
你去过github.com/prisma/prisma/issues/95线程吗? 我没有。但这是我要的吗?我想要的是让用户按帖子数量排序。所以为每个用户计数(帖子)并按该数字排序。我不认为他们在那个问题上谈论的是同一件事,是吗? 【参考方案1】:正如@shivam-panday 在评论中所说,目前在 Prisma 中没有实现(参见问题:https://github.com/prisma/prisma/issues/95)
这条评论特别解释了你的问题:
如果还能够通过“对多”相关字段(根据相关项目的数量)进行排序,那就太好了。
例如,要获得投票最多的前 10 个链接的列表(假设投票是 [Vote!] 类型的相关字段!):
query allLinks(first: 10, orderBy: votes_DESC) id url description _votesMeta count
目前,要获得该列表,您必须查询每个链接,然后在客户端对其进行排序/切片,这可能会导致大量过度获取。
有问题的评论:https://github.com/prisma/prisma/issues/95#issuecomment-320433296
【讨论】:
感谢您的回答!是的,这是真的。这就是我所需要的......因为用当前的 Prisma 实现不可能做到这一点,你们能想到的任何解决方法吗?干杯:) 使用 Prisma api,我不确定是否有一种方法不需要检索所有有投票的用户,然后自己进行排序。我认为这不是一个好的解决方案,因为它在您的后端会占用大量资源。但是,您可以使用对数据库的原始访问来查询您的用户并对其进行排序。您将检索他们的 ID,然后执行简单的 Prisma 查询以获取您需要的信息。 (prisma.io/docs/prisma-graphql-api/reference/…)【参考方案2】:我遇到了与 Prisma 相同的问题,这是一个主要问题。检索所有用户及其所有帖子,并按帖子数量排序不是一个实用的解决方案。
我能想到的解决方法是跟踪帖子的数量(每次添加/删除时)并将其存储在用户中。
type User
id: ID! @unique
name: String!
postsCount: Int!
posts: [Post!]!
这样,Prisma 将公开 postsCount 的排序选项。
我不确定 Prisma 2 是否为这个问题提供了合适的解决方案...有人知道吗?
【讨论】:
以上是关于查询以获取按关系中的项目数排序的数据的主要内容,如果未能解决你的问题,请参考以下文章
NSSortDescriptor 按核心数据对多关系中的项目数排序
Sql 查询以获取最多 10 条的最新记录并按提到行排名的字段排序 [关闭]