导入期间的数据转换

时间:2011-05-22 09:51:51

标签: php mysql

我正在使用PHP将大约350,000行从CSV文件导入MySQL(Symfony Framework,如果这很重要)我正在读取每一行并插入到SQL表中。这将是一个日常过程 - 线数将增加。

我必须将2列转换为数字(这是一个外键)。我想知道最有效的方法。我正在尝试在MySQL中使用查找表以及在PHP中使用数组 - 但我想知道是否有更有效的方法。

这两列有大约60种不同的组合,这里是我有的翻译表的一个例子

Feature         Type          CODE
ANZIRL          Voice Call    8
BT2DT2          Data Call     6
BT2IL2          Voice Call    1
BT2UK2          Voice Call    2
DG2DG2          Voice Call    4
DG2DT2          Data Call     3
DG2EC           Voice Call    1
DG2EDQ          Voice Call    5
DG2EZY          Voice Call    7

CSV将如下

DG2DG2,x,x,x,Voice Call,x,x
DG2DT2,x,x,x,Data Call,x,x

等...

我需要将其插入到我的表中

x,4,x,x
x,3,x,x

等......

1 个答案:

答案 0 :(得分:0)

我会按原样批量导入CSV文件到MySQL中(即创建一个镜像CSV字段布局的表),然后对CSV导入表运行查询以获取外键代码。

类似的东西:

INSERT into sometable (code,other,fields)
SELECT code, other, fields
FROM codes c
JOIN csvtable ct
WHERE ct.feature = c.feature AND ct.type = c.type

基本思想是不在PHP或MySQL中逐行执行处理,而是将所有数据导入MySQL,然后运行上述查询的某个版本,以便在一步中有效地进行外键翻译。

如果你逐行使用350,000条记录,这将是一个相当缓慢的过程,php效率不是很高......