通过三步过程处理带有larga数组的csv导入

时间:2011-04-02 11:12:33

标签: php javascript mysql ajax json

我需要一些我的项目的帮助。它是关于DVD数据库。目前我计划实现一个csv数据函数来导入dvds以及文件中的所有信息。 我将分三步完成。

第1步 - 显示我要导入的数据,构建数组
- 导入数据,构建会话数组

步骤2
- 编辑信息

步骤3
- 在更新前显示结果 - 更新数据

到目前为止它的工作原理,但我有大文件的问题。 csv数据有20列(标题,流派,情节等),对于csv中的每一行,我创建了一些数组,以便在接下来的步骤中使用它。

当我有大约500行时,浏览器在导入时经常崩溃。我没有回应。

无论如何,我现在尝试将此作为ajax调用进程。优点是,我可以定义系统处理每个调用的程序数,用户可以看到系统仍在工作,如下载/上传文件时的状态栏。

目前我试图找到一些有用的例子来说明我如何做到这一点,但到目前为止我找不到有用的东西。

也许你有一些tipps或一个例子如何工作,说每次调用处理20行,构建数组。

我想在下一步使用相同的函数构建会话数组,依此类推。

一些信息:

我使用fgetcsv()从文件中读取行。我浏览行和每列我有不同的查询,如项目ID唯一,标题存在,描述存在等。 因此,如果未输入其中一个数据,则会出现错误,即出现错误的行和列。

我感谢您的任何帮助

2 个答案:

答案 0 :(得分:1)

虽然这不是您正在寻找的直接答案

500行不应该花费太长时间来处理,所以...这是另一个想法。

使用正确的字段结构创建临时表 然后你可以使用select语句从中提取出情节,类型等的各种独特条目,而不是沿途制作一堆数组 mysql导入将非常快速的数据

然后,您可以根据需要对其进行编辑,最后将临时但现已验证的表格中的数据插入最终表格。

在使用ajax进行操作时,你必须做一个重复的定时事件来刷新状态,问题不是20行,而是需要特定的时间段,因为你的浏览器无法知道,假设csv已上传,你可以用20行块处理它。

如果你在一个大的大文本框中输入csv,你可以通过前20行,将其余部分传递给下一页等等,将我视为潜在的混乱。

所以,虽然我知道我没有直接回答你的问题,但我希望我能为你提供替代和可能更实用的替代方案的食物。

答案 1 :(得分:1)

使用'LOAD DATA INFILE'语法。香港专业教育学院将它用于500mb及3mil行的文件,需要几秒钟而不是几分钟。

http://dev.mysql.com/doc/refman/5.0/en/load-data.html