postgresql Hasura:如何从多个相关表中查询记录计数

woobm2wo  于 2023-01-08  发布在  PostgreSQL
关注(0)|答案(1)|浏览(133)

因此,我在Hasura中为我的GraphiQL创建了此查询,这将获取所有用户数据,它旨在包括分析和跟踪表中其他数据的总量/计数,其中用户的id等于分析和跟踪表中的user_id

query getAllUsersData {
  users {
    id
    username
    bio
    first_name
    last_name
    banner
    profile_image_url
    created_at
    followers: follow_aggregate(where: {user_id: {_eq: id}, is_follow: {_eq: 1}}) {
        aggregate {
          count: count
        }
      }
      visits: analytics_aggregate(where: {user_id: {_eq: id}, type: {_eq: "visit"}}) {
        aggregate {
          count: count
        }
      }
      shares: analytics_aggregate(where: {user_id: {_eq: id}, type: {_eq: "share"}}) {
        aggregate {
          count: count
        }
      }
  }
}

这里的问题是,由于follow_aggregateanalytics_aggregate,我无法运行它,它给我一个错误Cannot query field "follow_aggragate" and "analytics_aggregate" on type "users".
我正在尝试通过Hasura的项目 Jmeter 板这一点,我已经检查了从Hasura的这方面的文档,我仍然真的很缺乏。希望有人会引导我到这一点,真的很感激提前谢谢你。
我已经做了我的研究,寻找聚集的步骤,也寻找其他方法.
我尝试输出的是:

{
users:
{
userdatahere..
followersinthere,
visitsinthere,
sharesinthere
},
{
userdatahere..
followersinthere,
visitsinthere,
sharesinthere
},
}

或者让我给予你一个简单的结构,但是SQL:

SELECT u.id, u.username, u.bio, u.first_name, u.last_name, u.banner, u.profile_image_url, u.created_at,
       COUNT(f.user_id) AS followers,
       SUM(CASE WHEN a.type = 'visit' THEN 1 ELSE 0 END) AS visits,
       SUM(CASE WHEN a.type = 'share' THEN 1 ELSE 0 END) AS shares
FROM user u
LEFT JOIN follow f ON u.id = f.user_id
LEFT JOIN analytics a ON u.id = a.user_id
GROUP BY u.id

**更新1/8/2023:**我也试过这个方法(是数组关系):

  1. Database Table Users relationship to other tables
  2. Here's the column of the users table
  3. And this is the output users table + links table现在唯一的问题是如何用schema graphiql实现它

答案:Preview Output

1.我设置了外键
1.已跟踪未跟踪的外键关系
1.它创造了一系列的关系
1.我再次使用模式,但从follow改为follows

query getAllUsersData {
 users {
   id
   username
   bio
   first_name
   last_name
   banner
   profile_image_url
   created_at
   followers: follows_aggregate(where: {is_follow: {_eq: 1}}) {
       aggregate {
         count: count
       }
     }
     visits: analytics_aggregate(where: {type: {_eq: "visit"}}) {
       aggregate {
         count: count
       }
     }
     shares: analytics_aggregate(where: {type: {_eq: "share"}}) {
       aggregate {
         count: count
       }
     }
 }
}

多亏了spatialaustin

vyswwuz2

vyswwuz21#

您是否确定followanalytics关系在您的数据库中配置正确并由Hasura跟踪?您可以通过查看users表的“relationships”选项卡进行验证。
您还需要配置Hasura的权限以允许聚合查询(docs)。
如果您使用的是Hasura Cloud,您可能需要仔细检查是否允许深度至少为2(docs)的查询。
检查所有这些的最简单方法是在Hasura控制台的GraphIQL编辑器中构建查询,它将显示查询中可用的实体。
最后,如果您的关系确实配置正确,您就不需要在查询的where子句中包含外键-这是通过查询结构隐含的。

query getAllUsersData {
    users {
      id
      username
      bio
      first_name
      last_name
      banner
      profile_image_url
      created_at
      followers: follow_aggregate {
        aggregate {
          count: count
        }
      }
      visits: analytics_aggregate(where: { type: { _eq: "visit" } }) {
        aggregate {
          count: count
        }
      }
      shares: analytics_aggregate(where: { type: { _eq: "share" } }) {
        aggregate {
          count: count
        }
      }
    }
  }

希望能帮上忙!

相关问题