Php 导入期间的数据转换

Php 导入期间的数据转换,php,mysql,Php,Mysql,我正在使用PHP(Symfony Framework,如果需要的话)将大约350000行CSV文件导入MySQL,我正在阅读每一行,并在执行时插入SQL表。这将是一个每天的过程,并且生产线的数量将增加 我必须将其中的两列转换为一个数字(这是一个外键)。我想知道最有效的方法。我正在尝试使用MySQL中的查找表和PHP中的数组,但我想知道是否有更有效的方法 这两列可能有大约60种不同的组合,下面是我的翻译表示例 Feature Type CODE ANZIRL

我正在使用PHP(Symfony Framework,如果需要的话)将大约350000行CSV文件导入MySQL,我正在阅读每一行,并在执行时插入SQL表。这将是一个每天的过程,并且生产线的数量将增加

我必须将其中的两列转换为一个数字(这是一个外键)。我想知道最有效的方法。我正在尝试使用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

等等……

我会按原样将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(我建议你屏住呼吸),你会死的