Php 导入期间的数据转换
我正在使用PHP(Symfony Framework,如果需要的话)将大约350000行CSV文件导入MySQL,我正在阅读每一行,并在执行时插入SQL表。这将是一个每天的过程,并且生产线的数量将增加 我必须将其中的两列转换为一个数字(这是一个外键)。我想知道最有效的方法。我正在尝试使用MySQL中的查找表和PHP中的数组,但我想知道是否有更有效的方法 这两列可能有大约60种不同的组合,下面是我的翻译表示例Php 导入期间的数据转换,php,mysql,Php,Mysql,我正在使用PHP(Symfony Framework,如果需要的话)将大约350000行CSV文件导入MySQL,我正在阅读每一行,并在执行时插入SQL表。这将是一个每天的过程,并且生产线的数量将增加 我必须将其中的两列转换为一个数字(这是一个外键)。我想知道最有效的方法。我正在尝试使用MySQL中的查找表和PHP中的数组,但我想知道是否有更有效的方法 这两列可能有大约60种不同的组合,下面是我的翻译表示例 Feature Type CODE ANZIRL
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
等等……我会按原样将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,然后运行上述查询的某个版本,以一步高效地完成外键转换
如果你用350000条以上的记录逐行记录,这将是一个相当缓慢的过程,php的效率不是很高…OK-这是一种不同的方法-谢谢。。。CSV中大约有40列,我只需要8列,但这样可能会更快。不可能,毫无例外会更快。不要担心导入的列数,表的大小在这种规模下并不重要,但将处理从效率相对较低的PHP/Symphony转移到MySQL非常重要。试一试:先屏住呼吸;然后使用Symphony将350000条记录逐行导入MySQL;完成后,再次呼吸;--)太棒了,如果你尝试选项1(我建议你屏住呼吸),你会死的