3

短い

コースのリストとカウントを生成する必要がある

  1. 全て
  2. 未回答
  3. 回答済みだが未チェック

質問。

詳細

この結果を得るには、7 つのテーブルを操作する必要があります。

アップデート

データベース構造

https://docs.google.com/open?id=0B9ExyO6ktYcOenZ1WlBwdlY2R3c

ここに画像の説明を入力

フルサイズの画像については、ここをクリックしてください

それらのいくつかを説明します:

  1. answer_chk_results- 回答表を確認しました。したがって、このテーブルに回答が存在しない場合、それはチェックされていないことを意味します
  2. lesson_questions- レッスン <-> 問題の関連付け (ID による) テーブル
  3. courses-lessons- コース <-> レッスンの関連付け (ID による) テーブル

最初の問題だけはそれほど難しくないようです。もちろん、すべての問題の数を取得するには、私の計画は次のようになります。

  1. まず、すべてのコース名のリストを取得する必要があります。クエリは次のようになります。

    SELECT c.id, c.name FROM コース c

  2. courses-lessons次に、選択したすべてのコースで関連テーブルからすべてのレッスンを取得します1.(前のクエリを続行する方法がわかりません)

  3. 次に、選択したレッスンID(列)ごとにすべての問題を数えますlid2.

しかし、3 つの問題すべてについて、最終的な SQL ステートメントがどのようになるかわかりません。

助言がありますか?ご不明な点があればお尋ねください。

4

1 に答える 1

2

未回答の質問:回答済みの質問は、回答表に回答がない質問です。

SELECT * 
FROM questions
WHERE id NOT IN (SELECT qid FROM answers)

回答済みだがチェックされていない質問:

SELECT *
FROM questions q
INNER JOIN 
(
    SELECT * 
    FROM answers
    WHERE id NOT IN answer_chk_results    -- unchecked answer
) a ON q.id = a.qid                       -- only answered questions

編集:未回答、未チェック、すべての質問が1つのクエリでカウントされるコースのリストを取得するには:

SELECT c.id, c.name, COUNT(all.id) 'All', 
       COUNT(unanswered.id) 'Unanswered',
       COUNT(unchecked.id) 'Unchecked'
FROM courses c
INNER JOIN courses-lessons cl ON c.id = cl.cid
INNER JOIN questions all ON cl.id = all.lid
INNER JOIN
(
    SELECT * 
    FROM questions
    WHERE id NOT IN (SELECT qid FROM answers)
) unanswered ON cl.id = unchecked.lid
INNER JOIN
(
    SELECT *
    FROM questions q
    INNER JOIN 
    (
        SELECT * 
        FROM answers
        WHERE id NOT IN (SELECT aid FROM answer_chk_results)
    ) a ON q.id = a.qid 
) unchecked ON cl.id = unchecked.lid
GROUP BY c.id, c.name
于 2012-08-29T10:19:46.200 に答える