【发布时间】:2022-06-11 01:33:49
【问题描述】:
我正在尝试通过引用 Hasura 中的另一个表来过滤结果。 但我无法绕过它。可以用函数或视图来完成还是不可能?
这是我的桌子;
提供者
| id | name |
|---|---|
| 1 | Epic |
| 2 | EA |
| 3 | Valve |
游戏
| id | name |
|---|---|
| 10 | Half Life |
| 11 | Counter Strike |
| 12 | Apex Legends |
| 13 | Fifa |
网站
| id | name | providers | categories | users |
|---|---|---|---|---|
| 20 | Playnow.com | array relatioship | array relatioship | array relatioship |
| 21 | play.com |
用户
| id | username | site_id |
|---|---|---|
| 30 | tester 1 | 20 |
| 31 | tester 2 | 21 |
类别
| id | title | site_id | games |
|---|---|---|---|
| 40 | FPS | 20 | array relatioship |
| 41 | Sport | 21 | array relatioship |
除了这些表之外,我还有关系表来创建数组关系。
- provider_games - 提供商和游戏之间的关系。
-
- provider_id,
-
- game_id
- site_providers - 网站和提供商之间的关系。 (网站可用的提供商)
-
- site_id,
-
- provider_id
- game_category - 哪些游戏属于哪些类别。
-
- game_id,
-
- category_id
- user_banned_games - 此表是用户不允许玩的游戏 ID 的列表。
-
- game_id,
-
- user_id
- site_disabled_games - 此表包含网站所有者不希望其用户玩的游戏。
-
- site_id,
-
- game_id
我有一个全球供应商列表,其中一些供应商可供某些网站访问,一旦供应商可供网站使用,所有游戏都可供其用户访问。但在某些时候,网站所有者可能希望为其用户或仅为特定用户禁用特定游戏。
用户可以按提供商或类别浏览游戏。 我可以与 Hasura 的默认关系系统建立关系,但我不能将被禁止或禁用的游戏添加到等式中。
旁注:我在其 JWT 令牌中获得了用户的站点 ID。
下面有一个示例查询,但我需要的是“_nin”值应该是用户的 site_id 从 site_disabled_games 和 user_banned_games 获取的 id 集合。客户端不知道哪些ID被屏蔽了。
query getCategoriesWithGames {
getCategories {
id
name
shortname
casino_id
isActive
games(where: {game_id: {_nin: 10}}, limit: 10) {
game {
name
provider {
name
}
}
}
}
}
【问题讨论】:
-
您能否详细说明您要完成的确切查询?也许展示一些 GQL 查询的示例,这些查询与您想要实现的目标很接近,但效果不佳。您的问题中有很多很好的信息,但通过阅读它并不能完全清楚您到底想做什么以及遇到什么障碍
标签: sql postgresql stored-procedures hasura