2017-01-19 37 views
0

我一直有一个问题好几天了,并且遇到了一堵砖墙。首先,正如标题所示,我一直在努力将CSV文件导入到SQL数据库。SQL CSV文件 - 跳过特定列号后的所有列

更具体的说,这是通过服务器上的PHP脚本和通过MySQL将数据库完成的。

我目前有大约30个CSV文件(这个数字预计会增加),每天更新一次,然后每天触发一次cron脚本来更新新数据。它通过LOAD DATA INFILE加载文件。所有这些都很完美。

问题是: 每个CSV文件包含不同的列数。列数范围在50-56列之间。我在这个共同数据库中存储的数据只需要前8列。我已经知道如何使用@dummy跳过单个列,这要归功于以下Q & A:How to skip columns in CSV file when importing into MySQL table using LOAD DATA INFILE?

但是,由于不同列计数,虚拟计数并不总是相同,所以我想知道是否有从列1-8中获取数据的方式,然后忽略所有后面的列数?

+1

我现在不能测试,但对刚刚只包括八列来填充呢? 'LOAD DATA INFILE'file.txt'INTO TABLE t1(c1,c2,c3,c4,c5,c6,c7,c7,c8)' – AbraCadaver

+0

这实际上是完美的。以前,我尝试过类似的方法,但是产生了“未知列数”。谢谢 – gooner89

+0

太好了,请接受答案。 – AbraCadaver

回答

0

一个相当粗糙的补丁将首先读取php中的开始行,以逗号计算列数。然后知道金额,减去8并生成sql命令,现在知道需要忽略的列数。

0

就包括八列来填充,它会为我们从CSV行的第一个八:

LOAD DATA INFILE 'file.txt' INTO TABLE t1 (c1, c2, c3, c4, c5, c6, c7, c8)