如何将多条记录中的有序数据返回到 MySQL 中的一条记录中?

Posted

技术标签:

【中文标题】如何将多条记录中的有序数据返回到 MySQL 中的一条记录中?【英文标题】:How to return ordered data from multiple records into one record in MySQL? 【发布时间】:2014-01-13 18:05:03 【问题描述】:

我有一个 mysql 数据库,其中包含一个包含三个重要字段(为清楚起见重命名)的调查回复表:SURVEY_TAKER_ID、QUESTION_NUMBER 和 RESPONSE。以一个包含 3 个问题的调查为例,它看起来像这样:

SURVEY_TAKER_ID | QUESTION_NUMBER | RESPONSE
----------------------------------------
101               1                 Apple
102               1                 Orange
103               1                 Banana
101               2                 Morning
102               2                 Evening
103               2                 Afternoon
101               3                 Red
102               3                 Blue
103               3                 Yellow

我想创建一个 SELECT 查询,按问题编号顺序输出每个调查对象的 ID 和回答,例如:

101,Apple,Morning,Red
102,Orange,Evening,Blue
103,Banana,Afternoon,Yellow

我知道 SQL Server 有FOR XML,这可以使这更容易,但我的数据库在 MySQL 中,我必须承认,我一开始并不是很擅长 SQL。谁能给我一个示例查询,它会产生上面的输出,或者给我一个方法吗?

非常感谢任何可以提供帮助的人...

...杰

【问题讨论】:

ORDER BYGROUP_CONCAT 为您指出一种方法 ==> mahmudahsan.wordpress.com/2008/08/27/… 【参考方案1】:

试试这个:

SELECT CONCAT(SURVEY_TAKER_ID, ',', RESPONSE)
FROM (SELECT SURVEY_TAKER_ID, GROUP_CONCAT(RESPONSE) RESPONSE
      FROM (SELECT * FROM SURVEY ORDER BY SURVEY_TAKER_ID, QUESTION_NUMBER) A 
      GROUP BY SURVEY_TAKER_ID
     ) A 

【讨论】:

非常感谢,萨哈什。我会试一试并报告! 嗨,萨哈什。谢谢,但这会将对给定问题的所有回答放在每条记录中。我试图将每个survey_taker 的所有回复都放在每条记录中。不过,我感谢您的帮助! @JayinNJ 检查我更新的答案。我已将 group by 子句从 QUESTION_NUMBER 更改为 SURVEY_TAKER_ID【参考方案2】:

SURVEY_TAKER_ID 与“Question_Number: RESPONSE”样式连接:

SQL Fiddle

SELECT SURVEY_TAKER_ID
      ,GROUP_CONCAT(CONCAT(QUESTION_NUMBER, ': ', RESPONSE) ORDER BY QUESTION_NUMBER SEPARATOR ', ') AS RESPONSES
FROM Table1
GROUP BY SURVEY_TAKER_ID
ORDER BY SURVEY_TAKER_ID

.

SURVEY_TAKER_ID 与“RESPONSE”单独样式连接:

SQL Fiddle

SELECT SURVEY_TAKER_ID
      ,GROUP_CONCAT(RESPONSE ORDER BY QUESTION_NUMBER SEPARATOR ', ') AS RESPONSES
FROM Table1
GROUP BY SURVEY_TAKER_ID
ORDER BY SURVEY_TAKER_ID

【讨论】:

非常感谢,比尔。我会试一试并报告! 嗨,比尔。非常感谢您这样做。通过查看 SQL Fiddle 输出,我唯一担心的是那里没有控制来确保RESPONSE 输出按QUESTION_NUMBER 排序。有没有办法把它加进去?我尝试将ORDER BY 子句放在RESPONSE SEPARATOR 之后的括号中,但SQL Fiddle 抛出了错误。 嘿,杰。我相信您可能将 ORDER BY 放在 CONCAT 函数中,而不是 GROUP_CONCAT。我的第一个代码块在 GROUP_CONCAT 中嵌入了一个 CONCAT。我用似乎有效的 ORDER BY 更新了我的答案,并链接到新的小提琴 URS。我还按 SURVEY_tAKER_ID 对外部结果进行了排序。 好吧,我是个白痴。我现在知道了:SELECT SURVEY_TAKER_ID ,GROUP_CONCAT(RESPONSE ORDER BY QUESTION_NUMBER ASC SEPARATOR ', ') AS RESPONSES FROM Table1 GROUP BY SURVEY_TAKER_ID 感谢您的帮助!你摇滚!

以上是关于如何将多条记录中的有序数据返回到 MySQL 中的一条记录中?的主要内容,如果未能解决你的问题,请参考以下文章

获取mysql中的多条记录并存入json数组中显示在HTML表格单单字段中

如何使用 mySQL replace() 替换多条记录中的字符串?

SQL 查询将多条记录中的值组合到单个列中

求助大牛!C++编程,如何查询数据库中多条记录的多个字段值,并且返回到一个数据块中...急急急!

如果 mysql 数据库中的表中不存在,则更新或插入多条记录

如何在准备好的语句php中的不同行中插入多条记录