【问题标题】:break down the large number of rows in CSV and process them as a batch wise php分解 CSV 中的大量行并将它们作为批处理 php 处理
【发布时间】:2012-04-24 13:19:22
【问题描述】:

我可以编辑和上传包含超过 50000 条记录(购物车产品)的 CSV。它应该更新系统中的表数。所以我在我的购物车中使用 zend 框架。

我计划在使用 PHP/MYSQL 批量处理它们之前在内存中分解它们(50000 条 CSV 记录)

请任何人给我建议

我现在是什么

public function getDataFromPath($path=null) {
        if($path == null) {
            $path = $this->_path;
        }
        ini_set("auto_detect_line_endings", 1);
        $fp = fopen($path, "r");
        while(($line = fgetcsv($fp, 5000, ",")) !== FALSE) {
            $line = self::trimArray($line);
            $this->data[] = $line;
        }
        fclose($fp);          
        return $this->data;
    }

问候 肉山

【问题讨论】:

  • 为什么?真的,你为什么要这样做?为什么会更新表的数量?
  • 你尝试过什么,你在哪里卡住了?读一点,写一点,冲洗,重复,直到文件被处理......
  • @tombom 实际上我想通过 CSV 文件更新我的所有产品及其属性一次,因为我有大量记录 50,000 我计划在内存中分解并批量处理
  • 我更新了当前的最新内容,感谢 cmets

标签: php mysql csv import


【解决方案1】:

这是一份工作……

数据库管理员!!!

使用load data infile 业务将您的 csv 直接加载到表中,然后执行您需要的任何魔法。

【讨论】:

  • 谢谢,但我应该提供一个客户界面来完成导出 csv 编辑和上传
【解决方案2】:

每个 RDBMS 都不应该有 50.000 行的问题。没什么。无需批量处理它们。

只需使用LOAD DATA INFILE 命令就可以了。

示例见这里:LOAD DATA INFILE easily convert YYYYMMDD to YYYY-MM-DD?

更新(对 Ion Wood 的回答发表评论):要创建 CSV 文件,您可以使用 SELECT .. INTO OUTFILE 命令。

SELECT a,b,a+b INTO OUTFILE '/tmp/result.txt'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM test_table;

有关详细信息,请参阅manual.

【讨论】:

  • @Roshan 更新了我的答案。那是你要找的吗?如果不是,请进一步澄清。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-03
  • 1970-01-01
  • 2011-06-04
  • 2019-08-22
  • 2021-11-08
相关资源
最近更新 更多