コースリストを生成してカウントする必要があります
- すべて
- 未回答
- 答えたがチェックされていない
質問。
これが私の質問です
SELECT c.id,
c.name,
COUNT(allq.id) 'All',
COUNT(unanswered.id) 'Unanswered',
COUNT(unchecked.id) 'Unchecked'
FROM courses c
LEFT JOIN `courses-lessons` cl
ON c.id = cl.cid
LEFT JOIN lesson_questions allq
ON cl.id = allq.lid
LEFT JOIN
(
SELECT q.id, a.qid, q.lid
FROM lesson_questions q
LEFT JOIN
(
SELECT id, qid
FROM answers
WHERE id NOT IN (SELECT aid FROM answer_chk_results)
) a
ON q.id = a.qid
) unchecked
ON cl.id = unchecked.lid
LEFT JOIN
(
SELECT id
FROM lesson_questions
WHERE id NOT IN (SELECT qid FROM answers)
) unanswered
ON cl.id = unchecked.lid
GROUP BY c.id, c.name
これがSQLフィドルです
データベース構造
https://docs.google.com/open?id=0B9ExyO6ktYcOenZ1WlBwdlY2R3c
サンプルデータとして3つの質問を追加しましたが、クエリはすべての質問を計算して9を返します。それは不可能です。何かがおかしい。何が足りないのかわからない。
アップデート
いくつかの表について説明します。
answer_chk_results
-回答表を確認しました。したがって、このテーブルに回答が存在しない場合は、チェックされていないことを意味しますlesson_questions
-レッスン<->質問の関連付け(ID別)テーブルcourses-lessons
-コース<->レッスンの関連付け(ID別)テーブル
最初の問題だけはそれほど難しくないようです。もちろん、すべての質問の数を取得するには、私の計画は次のようになります。
まず、すべてのコース名のリストを取得する必要があります。クエリは次のようになります。
SELECT c.id、c.nameFROMコースc
courses-lessons
次に、から選択したすべてのコースで関連付けテーブルからすべてのレッスンを取得します1.
(前のクエリを続行する方法がわかりません)次に、から選択したレッスンID(列)ですべての質問をカウントします
lid
2.