私は、各質問が正しく答えられた回数と間違って何回回答されたかを把握したい小さなクイズアプリを持っています。質問、Playthrus、AnswerCountの3つのテーブルがあります。 Playthrusの表では、私は(1)incorrect_answer
をキャプチャします。これはプライマリキーですint質問の間違った答えによってクイズが終了しました。 (2)correct_answers
、質問の主キーが正しく応答されています。Postgres 9.6.x:プライマリテーブルからセカンダリテーブルを自動更新する方法は?
AnswerCountsテーブルには、id
,correct_count
、およびincorrect_count
の3つの列があります。 id
は質問テーブルIDにマッピングされます。
私の質問は:どのように新しい行がPlaythrusテーブルに提出されるたびに、(1)incorrect_answer
とcorrect_answers
列で見つかったすべての主キーの行を作成または更新など、ことを私はセットアップ私のPostgresデータベースことができます。 (2)correct_count
とincorrect_count
はそれに応じて増分されますか?
また、この問題に間違って近づいていますが、より良い方法がありますか?
私はPostgres 9.6.3を使用しており、Sequelizeしています。
編集:以下の応答ごとに、増分トリガを捨てて新しいテーブルAnswersを作成しました。
CREATE TABLE answers(
id serial primary key,
question_id int REFERENCES questions (id),
playthru_id int REFERENCES playthrus (id),
was_correct boolean
);
この表を、特定のプレイスルーからのすべての回答で間違いなく修正します。質問を決定するための
Queryが正しく、ほとんどのほとんどと誤っに答え:
SELECT id
FROM questions
WHERE id in (
SELECT question_id
FROM answers
GROUP BY question_id
ORDER BY COUNT(CASE WHEN [NOT] was_correct THEN 1 END) <--
DESC LIMIT 1)
私はあなたがこの理論的根拠をどこに置いているのが好きです。私が解決したら解決します。私が解決したいと思っているもう一つの問題は、「最も間違った」質問と「最も正しい」質問を取り出す方法です。おそらく質問表の新しい列ですか?私の最初の考えは、そのテーブルを純粋で不変のままにすることでした。 – Kwhitejr
@Kwhitejrこれは簡単です: '桁数で注文する(was_correct THEN 1 END)DESC LIMIT 1'。実際に重要なパフォーマンス上の問題が発生するまで、生データから計算できるものはすべて保存する必要はありません。リレーショナルデータベース設計の美点です。 – IMSoP
多くのありがとう。最後に1つを指定することができたら、提案された行(編集された質問の矢印の行を参照)によって行われたカウントをクエリ結果にどのように追加できますか? Answersテーブルの 'was_correct'エントリの' COUNT'は質問テーブルでは利用できませんので、完全に別のクエリなしでこの番号を取得する方法は不明です。私は 'WITH'と' JOIN'を使いこなしましたが、質問idと一緒に希望の数を得ることができませんでした。 – Kwhitejr