PHP多行用于单个记录到具有多个列的1行

时间:2018-04-25 19:48:52

标签: php arrays json mysqli multiple-columns

所以,这听起来很奇怪,我会尽力解释。

我有一个mySQL表有几千行(大约600K),我需要将该表中的记录输出到CSV文件中。问题是表中的信息以每行格式而不是许多列存储。类似于以下内容:

1 | 1 |约翰
2 | 1 |史密斯
3 | 1 |绿色
4 | 1 |汽车
5 | 2 |简
6 | 2 | Doe的
7 | 2 |蓝
8 | 2 |自行车

我想把它和输出如下。它可能是一个数组。

1 |约翰|史密斯|绿色|汽车
2 |简| Doe的|蓝|自行车

我尝试使用mysqli进行查询,然后执行数组并循环遍历它等等。它总是需要很长时间。我需要通过PHP和mySQL的组合来实现这一点。问题是我甚至不知道如何开始。对不起,如果它没有意义。我可以详细说明。

2 个答案:

答案 0 :(得分:0)

我会这样做(用数据库替换列/表名):

SELECT CONCAT(t.name_of_your_second_column, ';',  GROUP_CONCAT(name_of_your_third_column SEPARATOR ';'))
FROM NAME_OR_YOUR_TABLE t
GROUP BY t.name_of_your_second_column 

结果将是:

1;约翰;史密斯;绿色;车

2;简; Doe的;蓝色;自行车

循环结果数组。 然后,juste按照csv文件中的每一行写入“;”作为分隔符

如果需要的话,有点谷歌“用php编写csv文件”应该完成剩下的工作。

答案 1 :(得分:0)

最快的方法,因为我看到它使用php和mysql的全部功能将是两个查询:

select distinct col2

存储您的结果,并且"为每个"使用该值,以便在第二轮中为每个查询获得一个查询。

select col1,col3 where col2={value} order by col1

现在你准备好了你的输出,用另一个"每个"来迭代每个记录。显示或存储记录。在每个之前,输入你的迭代行号和行的开​​头。然后放入每个值和一个分隔符,并放入每个值之外的结束行。

由于您的初始数据库查询将具有有限的响应(单列,不同的值),因此它不会太长(按时间)或太长(内存方式)。并且各个查询应该共享内存,因此每个查询都会很小而且速度很快。这也可以避免长时间锁定数据库(取决于您的引擎,这可能会对其他用户产生影响)。