3

SQLコマンドに問題があります。

質問、その質問に対する可能な回答、およびユーザーからの返信を含む表があります。

次の例を想像してみてください。

質問1:誰が準決勝に勝ちますか?
Aswners:A)ポルトガルB)スペイン
回答:10人が投票B)スペイン、0人が投票A)ポルトガル

SELECT a.answer, COUNT(r.id) as total
FROM replies r
LEFT JOIN answers a ON a.id = r.id_answer
LEFT JOIN questions q ON q.id = a.id_question
WHERE q.id = 1
GROUP BY r.id_answer

私のポイントは、結果から取得
SELECTすることです:
スペイン10
ポルトガル0

しかし、私はそれを行う方法がわかりません。私が行った方法では、常に返信テーブルに返信がある回答者からの結果のみを取得するためです。このように:
スペイン10

4

3 に答える 3

6

あなたはあなたの質問とLEFT JOIN答えから始めなければならないでしょう。

SELECT a.answer, COUNT(r.id_answer) AS total
FROM questions q
JOIN answers a ON ( a.id_question = q.id )
LEFT JOIN replies r ON ( r.id_answer = a.id )
WHERE q.id = 1
GROUP BY a.id, a.answer

question現在のクエリでは、 :も必要ありません。

SELECT a.answer, COUNT(r.id_answer) AS total
FROM answers a
LEFT JOIN replies r ON ( r.id_answer = a.id )
WHERE a.id_question = 1
GROUP BY a.id, a.answer

SQL Fiddleの2番目のクエリについては、次の例を参照してください。

ANSWER      TOTAL
Spain       10
Portugal    0
于 2012-06-27T11:59:42.557 に答える
2
SELECT a.answer, COUNT(r.id) as total
FROM questions q
INNER JOIN answers a ON a.id_question  = q.id
LEFT JOIN replies r ON r.id_answer = a.id
WHERE q.id = 1
GROUP BY a.id;

内部結合の代わりに左結合を使用します。

編集:参加が更新されました。

于 2012-06-27T11:57:34.793 に答える
0

クエリはこのようにする必要があります-

SELECT a.answer, COUNT(r.id) as total 
FROM questions q 
INNER JOIN JOIN answers a ON q.id = a.id_question
LEFT JOIN REPLIES r ON a.id = r.id_answer
WHERE
q.id=1
GROUP BY 
a.answer

ここで重要な count(r.id)のは Portugal 0

于 2012-06-27T12:38:10.227 に答える