Как увеличить столбец таблицы postgres после выбора текущего значения qith Node pg?
Я создаю приложение, в котором есть таблицы пользователей, вопросов, ответов, комментариев и голосования. Не уверен, что это правильное решение, но я решил превратить таблицу голосования в таблицу соединения, содержащую идентификаторы всех других таблиц, вместо того, чтобы каждая другая таблица имела столбец voice_count, поскольку голоса будут принадлежать любой другой таблице.
Стол для голосования выглядит следующим образом
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" = $1 AND "accountId" =
$2`,
[questionId, accountId],
(err, res) => {
if (err) return reject(err)
resolve()
}
)
})
}
Я хотел, чтобы у каждого вопроса / ответа / комментария был подсчет голосов, а пользователь, публикуемый на маршруте голосования, будет увеличивать или уменьшать голоса любого из вышеперечисленных. Как я могу сделать это? У меня такое ощущение, что я допустил ошибку с самой таблицей для голосования. Должен ли я придерживаться своей первоначальной идеи иметь столбец voice_count в каждой таблице?
2 ответа
ОБНОВЛЕННЫЙ СТОЛ - благодаря альфасину
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),
);
Вместо выполнения оператора "UPDATE" у меня сработал INSERT "voiceCount" с 1 для upvote и -1 для downvote.
Теперь я могу запустить "SELECT SUM("voiceCount ")", чтобы получить все голоса за вопросы, ответы, комментарии, пользователей и все, что угодно.
Вы объявили questionVoteCount
как тип SERIAL
что означает автоинкремент. Похоже, что вы хотите сделать, это определить как INTEGER
,