猿问

PHP 从 50 万以上的 SQL 行生成 CSV

我多年来一直面临着一个问题。我有一个包含 500 000 行的大型数据集,我想将它们打印到 CSV 中。


在第一种情况下,我需要根据行上的列进行计算以确定“结果”列。我已经找到了解决方案。我正在使用“fetch”并逐行进行计算并逐渐打印到我的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


catspeake
浏览 110回答 1
1回答

不负相思意

您可以通过按块进行计算来减少使用的内存。使用 SQL,您可以循环多个请求,每个请求仅包含特定数量的行。FETCH对于 Oracle,这可以通过和来完成OFFSET。
随时随地看视频慕课网APP
我要回答