0

我在下面有一个“答案”数据库表:

答案表

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

所以我猜我的 GROUP BY CLAUSE 不正确,我的问题是 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

下面我包含了“问题”和“答案”表的 SHOW CREATE TABLES:

问题表:

 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

下面是“问题”表行(我只包括 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 回答