我正在使用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
等......
答案 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效率不是很高......