使用来自mysql的大量数据

时间:2011-05-03 05:29:02

标签: php mysql csv

我在允许用户从数据库下载大型报告时遇到了问题。

用户可以在网站上浏览报告,我已经为页面设置了限制和分页,所以没有问题。

但是现在我在csv文件中添加了一次下载整个报告的功能。我收到内存错误,说我已达到允许的最大内存,并且我没有权限在服务器上增加它。有谁知道如何才能做到这一点?到目前为止只是得到700k结果的查询停止了我的脚本。

ps我有搜索stackoverflow,到目前为止找不到它的答案。我正在使用php和mysql来获取数据。

提前致谢

4 个答案:

答案 0 :(得分:3)

不要在单个请求中导出整个数据。

在从数据库导出数据时应用一些限制和偏移量。

喜欢:

  • 在第一次去它将从中导出数据 0到9999,附加到csv,并重定向到相同的网址,偏移量= 10000,限制= 10000
  • 在第二次去它将导出数据从10000到19999,并附加到csv,并重定向到相同的网址,偏移= 20000和限制= 10000

答案 1 :(得分:1)

根据我对Guarav答案的评论,你无法一次性从数据库中获取那么多数据 - 你以后如何操纵它并不重要。

你必须

  • 在一次操作中限制从mysql获取的数据量 - 并且可能会重复这个,直到您拥有完整的数据集 - 并且Guarav建议您需要将数据保存在文件的PHP内存空间之外然后重定向到它。但鉴于此过程将变得缓慢,这不是一个可扩展的解决方案
  

我该如何重定向?如果我已经发送

这是微不足道的 - 如果你在理解如何做到这一点时遇到问题,那么你已经大大超出了你的深度。

  • 或者您可以在Web服务器的PHP之外生成报告,但如果您没有配置Web服务器的权限,那么您可能也无法运行程序。

答案 2 :(得分:0)

就像@symbcbean所说的那样,创建文件并使用每个查询偏移附加数据的过程非常缓慢。所以我提出了一个替代方案,我认为我应该分享,以防其他人面临同样的问题。

我已经设置了一个cronjob,它会在晚上创建包含所有必要数据的文件,因为数据每周只会更改几次。所以现在我已经清除了每次有人需要访问它时生成新csv的开销,而只需重定向到预制文件并完成工作!

谢谢@Gaurav& @symbcbean!

答案 3 :(得分:0)

您可以将数据附加到一堆记录中的文件中 就像是 : 从mysql获取第一条10000条记录 首先将10000条记录写入文件 获得第二个10000记录 将第二个10000记录写入文件 然后打开链接并将其发送给用户。