导出mysql表,数据分布在多行到csv

时间:2015-12-09 15:42:20

标签: mysql csv export

我有一个mysql表,其中填充了我网站上的webform的输入。表单包含姓氏,姓氏,电子邮件,电话,地址等字段....当用户提交表单时,这些数据以相当奇怪的方式存储在mysql表中。 我的表看起来像这样:

subission# | value                | field   | tstamp    | and   |many |more |columns
=====================================================================================
1          |john@server.com       |email    |1448898875 |       |     |     |
1          |john                  |firstname|1448898875 |       |     |     |
1          |doe                   |lastname |1448898875 |       |     |     |
1          |london                |city     |1448898875 |       |     |     |
2          |jane@aol.com          |email    |1448898870 |       |     |     |
2          |jane                  |firstname|1448898870 |       |     |     |
2          |doe                   |lastname |1448898870 |       |     |     |
2          |new york              |city     |1448898870 |       |     |     |
3          |tim @aol.com          |email    |1448838571 |       |     |     |
3          |tim                   |firstname|1448838571 |       |     |     |
3          |smith                 |lastname |1448838571 |       |     |     |
3          |paris                 |city     |1448838571 |       |     |     |

我需要将这些数据导出到csv文件,以便将其导入到其他服务器上的新闻稿脚本中,但服务器希望这些数据采用不同的格式:

submission#,email,firstname,lastname,tstamp,.....
1,john@server.com,john,doe,london,1448898875,,,,
2,jane@aol.com,jane,doe,1448898870,,,,

导出为csv不是问题,但如何将一个提交#的所有数据放入一行?任何人都可以请我指出正确的方向,如何用SQL实现这个目标?

1 个答案:

答案 0 :(得分:1)

如果使用concat()和group_concat()函数将字段内容连接到单个字段,则可以获得所需的输出,其中值以逗号分隔。

唯一的问题可能是,如果特定提交缺少任何特性。如果是这种情况,那么您将需要一个帮助表,其中列出了所有属性,您需要在该表上保持连接。由于您的示例数据不是这种情况,因此我没有提供此方案的代码。

select concat(submission, ',', group_concat(`value` order by `field` asc), ',',tstamp)
from table group by submission, tstamp

如果您需要第1行中的字段名称,则创建一个单独的查询,该查询将由逗号分隔的字段名称连接起来,并将2与union结合使用。