首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GROUP BY子句未正确显示行

GROUP BY子句未正确显示行
EN

Stack Overflow用户
提问于 2012-10-11 08:47:52
回答 1查看 91关注 0票数 0

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

答题表

代码语言:javascript
复制
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中输出表时,它应该像这样显示它:

代码语言:javascript
复制
  Question  Answer

  7         ABD
  1         A
  1         True

代码语言:javascript
复制
Question  Answer
7         ABD
7         ABD
7         ABD
1         ATrue
1         ATrue

所以我猜我的GROUP BY子句是错误的,我的问题是GROUP BY子句应该是什么才是正确的?

代码语言:javascript
复制
 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:

问题表:

代码语言:javascript
复制
 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

答题表:

代码语言:javascript
复制
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列,因为它们与这种情况相关:

代码语言:javascript
复制
SessionId QuestionId 
AAA       1
AAC       1
AAD       7

“答案”表中的行位于此问题的顶部。

更新:使用上面的查询,我得到了以下结果(仅包括相关列):

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-11 08:50:17

您需要添加GROUP BY子句。试试这个(它是一个简化的版本)

代码语言:javascript
复制
SELECT QuestionID, GROUP_CONCAT(Answer SEPARATOR '')
FROM tableName
GROUP BY SessionID, QuestionID

SQLFiddle Demo

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12830612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档