如何在使用 Node pg 选择当前值后增加 postgres table 列?
How to increment postgres table column after selecting the current value qith Node pg?
我正在创建一个包含用户、问题、答案、评论和投票 table 的应用。不确定这是否是个好决定,但我决定将投票 table 加入包含所有其他 table 的 ID 的连接 table,而不是让所有其他 table ] 有一个 vote_count 列,因为投票将属于每个其他 table。
投票 table 看起来像这样-
CREATE TABLE vote (
"questionVoteCount" SERIAL,
"answerVoteCount" SERIAL,
"commentVoteCount" SERIAL,
"accountId" INTEGER REFERENCES account(id),
"questionId" INTEGER REFERENCES question(id),
"answerId" INTEGER REFERENCES answer(id),
"commentId" INTEGER REFERENCES comment(id),
PRIMARY KEY ("questionVoteCount", "answerVoteCount",
"commentVoteCount")
);
我的模型是这样的-
class Vote {
constructor({
questionVoteCount,
answerVoteCount,
commentVoteCount,
accountId,
questionId,
answerId,
commentId
} = {}) {
this.questionVoteCount =
this.questionVoteCount || VOTE_DEFAULTS.questionVoteCount
this.answerVoteCount = this.answerVoteCount || VOTE_DEFAULTS.answerVoteCount
this.commentVoteCount =
this.commentVoteCount || VOTE_DEFAULTS.commentVoteCount
this.accountId = accountId || VOTE_DEFAULTS.accountId
this.questionId = questionId || VOTE_DEFAULTS.questionId
this.answerId = answerId || VOTE_DEFAULTS.answerId
this.commentId = commentId || VOTE_DEFAULTS.commentId
}
static upVoteQuestion({ accountId, questionId }) {
return new Promise((resolve, reject) => {
pool.query(
`UPDATE vote SET "questionVoteCount" =
"questionVoteCount" + 1 WHERE
"questionId" = AND "accountId" =
`,
[questionId, accountId],
(err, res) => {
if (err) return reject(err)
resolve()
}
)
})
}
我希望每个 question/answer/comment 都有一个投票计数,并且在投票路线上发帖的用户会增加或减少上述任何一个的投票。我该怎么做呢?我有一种感觉,我在投票 table 本身上犯了一些错误。我是否应该坚持我最初的想法,即在每个 table 中有一个 vote_count 列?
您将 questionVoteCount
声明为 SERIAL
类型,这意味着自动递增。看起来你想要做的是将其定义为 INTEGER
.
已更新TABLE- 感谢 alfasin
CREATE TABLE vote (
"questionVoteCount" INTEGER DEFAULT 0 NOT NULL,
"answerVoteCount" INTEGER DEFAULT 0 NOT NULL,
"commentVoteCount" INTEGER DEFAULT 0 NOT NULL,
"accountId" INTEGER REFERENCES account(id),
"questionId" INTEGER REFERENCES question(id),
"answerId" INTEGER REFERENCES answer(id),
"commentId" INTEGER REFERENCES comment(id),
);
而不是 运行ning ''UPDATE' 语句,'INSERT'-ing "voteCount" 1 表示赞成票,-1 表示反对票对我有用。
现在我可以 运行 一个 'SELECT SUM("voteCount")' 来获得对问题、答案、评论、用户等的所有投票。
我正在创建一个包含用户、问题、答案、评论和投票 table 的应用。不确定这是否是个好决定,但我决定将投票 table 加入包含所有其他 table 的 ID 的连接 table,而不是让所有其他 table ] 有一个 vote_count 列,因为投票将属于每个其他 table。
投票 table 看起来像这样-
CREATE TABLE vote (
"questionVoteCount" SERIAL,
"answerVoteCount" SERIAL,
"commentVoteCount" SERIAL,
"accountId" INTEGER REFERENCES account(id),
"questionId" INTEGER REFERENCES question(id),
"answerId" INTEGER REFERENCES answer(id),
"commentId" INTEGER REFERENCES comment(id),
PRIMARY KEY ("questionVoteCount", "answerVoteCount",
"commentVoteCount")
);
我的模型是这样的-
class Vote {
constructor({
questionVoteCount,
answerVoteCount,
commentVoteCount,
accountId,
questionId,
answerId,
commentId
} = {}) {
this.questionVoteCount =
this.questionVoteCount || VOTE_DEFAULTS.questionVoteCount
this.answerVoteCount = this.answerVoteCount || VOTE_DEFAULTS.answerVoteCount
this.commentVoteCount =
this.commentVoteCount || VOTE_DEFAULTS.commentVoteCount
this.accountId = accountId || VOTE_DEFAULTS.accountId
this.questionId = questionId || VOTE_DEFAULTS.questionId
this.answerId = answerId || VOTE_DEFAULTS.answerId
this.commentId = commentId || VOTE_DEFAULTS.commentId
}
static upVoteQuestion({ accountId, questionId }) {
return new Promise((resolve, reject) => {
pool.query(
`UPDATE vote SET "questionVoteCount" =
"questionVoteCount" + 1 WHERE
"questionId" = AND "accountId" =
`,
[questionId, accountId],
(err, res) => {
if (err) return reject(err)
resolve()
}
)
})
}
我希望每个 question/answer/comment 都有一个投票计数,并且在投票路线上发帖的用户会增加或减少上述任何一个的投票。我该怎么做呢?我有一种感觉,我在投票 table 本身上犯了一些错误。我是否应该坚持我最初的想法,即在每个 table 中有一个 vote_count 列?
您将 questionVoteCount
声明为 SERIAL
类型,这意味着自动递增。看起来你想要做的是将其定义为 INTEGER
.
已更新TABLE- 感谢 alfasin
CREATE TABLE vote (
"questionVoteCount" INTEGER DEFAULT 0 NOT NULL,
"answerVoteCount" INTEGER DEFAULT 0 NOT NULL,
"commentVoteCount" INTEGER DEFAULT 0 NOT NULL,
"accountId" INTEGER REFERENCES account(id),
"questionId" INTEGER REFERENCES question(id),
"answerId" INTEGER REFERENCES answer(id),
"commentId" INTEGER REFERENCES comment(id),
);
而不是 运行ning ''UPDATE' 语句,'INSERT'-ing "voteCount" 1 表示赞成票,-1 表示反对票对我有用。
现在我可以 运行 一个 'SELECT SUM("voteCount")' 来获得对问题、答案、评论、用户等的所有投票。