首页 > 解决方案 > PHP 从 500k+ SQL 行生成 CSV

问题描述

我自古以来就面临一个问题。我有一个包含 500 000 行的大型数据集,我想将它们打印到 CSV。

在第一种情况下,我需要从一行中的列进行计算以确定“结果”列。我找到了解决方案。我正在使用“获取”并逐行进行计算并逐渐打印到我的 csv

简化示例:

|---------------------------------------|
| ID | type | var1 | var2 | var1 * var2 |
|---------------------------------------|
| 0  |  car |    2 |    5 |          10 |
| 1  | moto |    4 |    8 |          32 |
| 2  |  car |    0 |    2 |           2 |
|---------------------------------------|

在第二种情况下,我需要从 500k 行中打印涉及这 500k 行中的大量行的计算(最多可以包含 10k+ 行)。

简化示例:

|-----------------------------|
| type |      sum var1 * var2 |
|-----------------------------|
|  car |             87677670 |
| moto |              3232435 |
|-----------------------------|

但是,计算比乘法的和要复杂得多。翻译:它们不能直接在 SQL 中完成。

我的问题是,如果我让我的所有汽车从我的数据库到我的 php 应用程序循环,我的 php memory_limit 将达到。我怎样才能像第一个例子一样逐渐做到这一点?

不是:我使用的是 Oracle 12c 和 PHP 5.3.5

标签: phporacle

解决方案


您可以通过按块进行计算来减少使用的内存。使用 SQL,您可以循环多个请求,每个请求仅包含特定数量的行。

在 Oracle 中,这可以使用FETCH和来完成OFFSET。这是一份文档,您可以在其中找到所需的一切。


推荐阅读