1

私のデータベース構造は次のようになります。

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

一部の表の説明:

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

次のようにデータベースにクエリを実行すると:

SELECT
    q.id,
    q.content,
    q.type
FROM
    `questions_and_exercises` q,
    `lesson_questions` lq
WHERE
    q.id = lq.qid
AND lq.lid = 1

質問のすべてのリストを取得しています。しかし、私が望むのは、すべての質問に対する回答とチェック済みの回答の数です。このクエリを使用すると:

SELECT
    q.id,
    q.content,
    q.type,
    COUNT(DISTINCT a.ID) answer_count,
    COUNT(DISTINCT acr.id) checked_count
FROM
    `questions_and_exercises` q,
    `lesson_questions` lq
LEFT JOIN answers a ON a.qid = lq.qid,
LEFT JOIN `answer_chk_results` acr ON acr.aid = a.id
WHERE
    q.id = lq.qid
AND lq.lid = 1

結果は、回答の数が間違っている 1 つの質問のみです。(私の DB には約 9 ~ 10 の質問があります) 何が欠けていますか?

4

1 に答える 1

5

Agroup byは次のように役立ちます。

select  q.id
,       q.content
,       q.type
,       count(distinct a.id) as answer_count
,       count(acr.checked) as checked_count
from    questions_and_exercises q
join    lesson_questions lq
on      q.id = lq.id
left join
        answers a 
on      a.qid = lq.qid
left join
        answer_chk_results acr 
on      acr.aid = a.id
group by
        q.id
,       q.content
,       q.type

テーブルcount(acr.checked)内の行で回答の数を返すことに注意してください。answer_chk_resultsチェックcount(distinct acr.checked)された列の異なる値の数を返します。チェックがブール値の場合、常に 1 または 0 になります。

于 2012-09-01T11:15:21.310 に答える