【问题标题】:Sequelize Query - Count associated tables and count all for paginationSequelize Query - 计算关联表并计算所有分页
【发布时间】:2020-08-28 11:34:30
【问题描述】:

这是我在 stackoverflow 上的第一个问题,以前从未使用过,但这个问题让我抓狂。

我正在为我正在开发的一个 React 应用程序构建一个无限滚动组件,我正在尝试使 Postgres DB 查询工作。

我有 2 个表 - 挑战和用户挑战。

挑战有很多用户挑战。

我需要获取挑战的子部分(从开始到结束),每个挑战都有“参与者”数量(相关用户挑战的数量)的计数,以及所有挑战的计数。

类似这样的:

{
rows: [Challenge, Challenge, Challenge],
count: n
}

其中每个挑战包括作为“参与者”的用户挑战的总数,并且计数是所有挑战的计数。

这是查询:

let json_query = {
    attributes: { 
        include: [[Sequelize.fn("COUNT", Sequelize.col("user_challenges.id")), "participants"]] 
    },
    include: [{
        model: UserChallenge, attributes: []
    }],
    order: [['timestamp', 'DESC']],
    offset: start, 
    limit: end
  }

startend 数量是分页的开始和结束。

我按如下方式运行此查询:

var challengeInstances = await Challenge.findAndCountAll(json_query)

这会导致以下错误:

name: 'SequelizeDatabaseError',
  
parent: error: missing FROM-clause entry for table "user_challenges"

这是它正在运行的 sql:

`SELECT "challenge".* FROM (SELECT "challenge"."id", "challenge".*, COUNT("user_challenges"."id"), "challenge"."participants" FROM "challenges" AS "challenge" GROUP BY "challenge"."id" ORDER BY "challenge"."end_date" DESC LIMIT '4' OFFSET '0') AS "challenge" LEFT OUTER JOIN "user_challenges" AS "user_challenges" ON "challenge"."id" = "user_challenges"."challenge_id" ORDER BY "challenge"."end_date" DESC;`,

Sequelize 或原始查询都很好。 如果您需要更多信息,请告诉我,非常感谢。

【问题讨论】:

    标签: sql node.js postgresql sequelize.js


    【解决方案1】:

    您可以像这样使用 sequelize 文字并从属性中删除对象,只需将此代码粘贴到属性中。

    attributes: [
        [
            sequelize.literal(`(
            SELECT COUNT(id)
                FROM user_challenges
            WHERE 
                // your condition of foreign key like (user_challenges.participants_id = participants.id)
        )`),
            'numberOfParticipants'
        ]
    ]
    

    【讨论】:

      猜你喜欢
      • 2016-10-15
      • 1970-01-01
      • 2021-06-05
      • 1970-01-01
      • 1970-01-01
      • 2019-10-11
      • 2015-07-09
      • 2022-08-23
      • 2010-10-06
      相关资源
      最近更新 更多