【问题标题】:PHP Multiple Rows for single Record into 1 Row with multiple columnsPHP Multiple Rows for single Record into 1 Row with multiple columns
【发布时间】:2018-04-25 19:48:51
【问题描述】:

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

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

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

我想得到它并输出如下。它可以是一个数组。

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

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

【问题讨论】:

  • 这里没有问题,伙计。你写了一个愿望清单。你期望得到什么答案?
  • 我没有机会完成就意外提交了。我希望它现在更有意义。
  • 你分块做。不是一下子。一次选择 10 条记录,处理它们,将其粘贴到 csv 中,然后移至下 10 条。如果您尝试选择所有内容,您有 600 000 行 - 这需要时间并占用大量内存。由于没有代码,因此很难告诉您其他任何内容。
  • 你只问不反馈

标签: php arrays json mysqli multiple-columns


【解决方案1】:

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

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;Jane;Doe;Blue;Bike

在结果数组上循环。 然后将每一行按原样写入您的 csv 文件中,“;”作为分隔符

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

【讨论】:

    【解决方案2】:

    我认为使用 php 和 mysql 的全部功能的最快方法是两个查询:

    select distinct col2
    

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

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

    现在您已准备好输出,可以用另一个“for each”遍历每条记录以显示或存储记录。在 for each 之前,输入您的迭代行号和行首。然后放入每个值和一个分隔符,并放入 for each 之外的结束行。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-08
      • 1970-01-01
      • 2022-12-02
      • 2022-12-02
      • 2022-12-01
      • 2012-08-30
      • 2022-12-02
      • 2016-04-12
      相关资源
      最近更新 更多