0

以下に「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
4

1 に答える 1

1

GROUP BY句を追加する必要があります。これを試してください(これは簡略化されたバージョンです)

SELECT QuestionID, GROUP_CONCAT(Answer SEPARATOR '')
FROM tableName
GROUP BY SessionID, QuestionID

SQLFiddleデモ

于 2012-10-11T00:50:16.847 に答える