以下に「Answer」データベーステーブルがあります。
回答表
AnswerId SessionId QuestionId Answer
10 AAD 7 A
11 AAD 7 B
12 AAD 7 D
13 AAA 1 A
14 AAC 1 True
上記のように、試験(セッション)AADの質問7には3つの回答があり、試験(セッション)AAAの質問1には1つの回答があり、試験(セッション)AACの質問1には1つの回答があります。
したがって、php / htmlでテーブルを出力すると、次のように表示されます。
Question Answer
7 ABD
1 A
1 True
しかし、問題は、テーブルを3つの別々の行に表示していることです。
Question Answer
7 ABD
7 ABD
7 ABD
1 ATrue
1 ATrue
だから私は私のGROUPBY句が間違っていると推測しています、私の質問はそれが正しいためにGROUP BY句はどうあるべきかということです?
SELECT DISTINCT an.SessionId, an.QuestionId, q.QuestionContent, o.OptionType, q.NoofAnswers, GROUP_CONCAT( an.Answer
ORDER BY an.Answer
SEPARATOR ' ' ) AS Answer, r.ReplyType, q.QuestionMarks
FROM Answer an
INNER JOIN Question q ON q.QuestionId = an.QuestionId
JOIN Reply r ON q.ReplyId = r.ReplyId
JOIN Option_Table o ON q.OptionId = o.OptionId
GROUP BY an.SessionId, an.QuestionId
以下に、「質問」テーブルと「回答」テーブルのSHOWCREATETABLESを含めました。
質問表:
CREATE TABLE `Question` (
`SessionId` varchar(10) NOT NULL,
`QuestionId` int(10) NOT NULL,
`QuestionContent` varchar(5000) NOT NULL,
`NoofAnswers` int(2) NOT NULL,
`ReplyId` int(1) NOT NULL,
`QuestionMarks` int(4) NOT NULL,
`OptionId` int(2) NOT NULL,
PRIMARY KEY (`SessionId`,`QuestionId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
回答表:
CREATE TABLE `Answer` (
`AnswerId` int(10) NOT NULL AUTO_INCREMENT,
`SessionId` varchar(10) NOT NULL,
`QuestionId` int(10) NOT NULL,
`Answer` varchar(5) NOT NULL,
PRIMARY KEY (`AnswerId`)
) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8
以下は「Question」テーブルの行です(この状況に関連するため、SessionId列とQuestionId列のみを含めます。
SessionId QuestionId
AAA 1
AAC 1
AAD 7
「回答」テーブルの行は、この質問の一番上にあります。
更新:上記のクエリを使用すると、次の結果が得られます(関連する列のみを含む):
SessionId QuestionId Answer
AAA 1 A A // This row answer should only be "A"
AAC 1 True True //This row answer should only be "True"
AAD 7 A B D //This row is fine