【问题标题】:Export large amount of data (20000 rows) from Mysql to excel (with Php)将大量数据(20000行)从Mysql导出到excel(使用Php)
【发布时间】:2013-05-10 22:09:35
【问题描述】:

我想导出大量数据(20000 行)从 Mysql 到 Excel(使用 PHP) 数据来自两个表。 第一个表的每条记录都有第二个表记录的ID。 我正在使用 PHPExcel 库。

伪代码:

$first_table = mysql_query("SELECT * FROM table_1")

foreach($first_table as $row){

   $store_id = $row['store_id'];

   $second_table =  mysql_query("SELECT * FROM table_2 Where ID = $store_id");

}

在这种情况下 mysql 查询运行次数(在第一个表中找到记录) 现在的问题是处理时间太长,最后没有结果php屏幕变成空白(白色)......我认为这是执行超时问题......

有什么办法吗??

【问题讨论】:

  • MySQLmysql_* 函数)扩展名为deprecated。我建议改用MySQLimysqli_* 函数)或PDO
  • 如果时间不是问题,请查看set_time_limit()。另外,可能是浏览器问题。
  • 添加一些日志信息以了解是否有问题:ìf ($i % 1000 = 0) echo "line %i";\'。我建议在 CLI 中执行您的代码。
  • 真的需要使用PHPExcel吗?也许您可以将其导出为单独的 csv 文件然后使用它们?
  • @peterm 的回答将大大提高速度...检索所有数据的单个数据库查询将比针对数据库逐行检索数据的 20001 个检索查询快很多

标签: php mysql excel import


【解决方案1】:

恕我直言,20k 行并不是那么大。使用JOIN 并在一次往返MySql 中获得完整的结果集怎么样

SELECT t1.*, t2.*
  FROM table1 t1 JOIN table2 t2
    ON t1.store_id = t2.store_id

优化查询的选择部分,以便只返回真正需要的列。

您的问题并不清楚,但是如果您只需要导出可以稍后在 Excel 中打开的数据而不是构建精美的报告,那么您可以使用 INTO OUTFILE 子句非常快速地生成 CSV 文件

SELECT t1.*, t2.*
  INTO OUTFILE '/tmp/tablename.csv'
       FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
       LINES TERMINATED BY '\n'
  FROM table1 t1 JOIN table2 t2
    ON t1.store_id = t2.store_id

【讨论】:

    猜你喜欢
    • 2013-09-09
    • 2012-10-25
    • 1970-01-01
    • 2015-06-17
    • 2013-03-19
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 2016-09-20
    相关资源
    最近更新 更多