2012-12-23 77 views
1

我有一个CSV文件9列,我有一个11列的MySQL表。Mysql CSV加载infile

CSV文件看起来像:

col1, col2, col3, col4, col5, col6, col7, col8, col9 

和MySQL表如下所示:

col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11 

我需要的脚本来忽略这两个错误(但需要)的MySQL列。

需要在进口被忽视MySQL的栏目有:DB_ID & nice_date =)

这是我到目前为止有:

$sql = 'LOAD DATA LOCAL INFILE "../csvtemp/test.csv" 
     INTO TABLE sample 
      FIELDS TERMINATED BY "," 
      OPTIONALLY ENCLOSED BY """" 
      IGNORE 1 LINES' 
; 
+4

你有没有想过使用PHP fgetcsv()读取的每一行CSV文件到数组中?然后你可以将数组插入查询中。它比LOAD DATA代码更多一点,但它确实是正确的。 –

+1

另一种替代方法 - ALTER TABLE删除多余的列,LOAD DATA,然后ALTER TABLE以将列添加回来。 –

+0

我想澄清,其中有九个,有十一个。我认为叙述与示例不符;-) –

回答

4
$sql = 'LOAD DATA LOCAL INFILE "../csvtemp/test.csv" 
     INTO TABLE sample 
      FIELDS TERMINATED BY "," 
      OPTIONALLY ENCLOSED BY """" 
      IGNORE 1 LINES 
      (col1, col2, col3, col4, col5, col6, col7, col8, col9)' 
; 

缺少的列将被赋予它们的默认值,否则,你可以指定固定值是这样的:

$sql = 'LOAD DATA LOCAL INFILE "../csvtemp/test.csv" 
     INTO TABLE sample 
      FIELDS TERMINATED BY "," 
      OPTIONALLY ENCLOSED BY """" 
      IGNORE 1 LINES 
      (col1, col2, col3, col4, col5, col6, col7, col8, col9)' 
      SET col10 = 'abc', col11 = 'xyz' 
; 
+0

我没有插入自动递增字段,但是当我插入用于下一次,它排除了一些数字。例如:当我插入4行时,首先是1,2,3,4,当我再次执行时,自动递增字段为8,9,10,11 –

+1

失败的插入仍然使用ID值。一般来说。不要担心id值之间的差距。自动增量要求是唯一的,但不要求是连续的。他们不是行号。 –

+0

没关系,但是在我们的查询中有一个问题..?它可以纠正..? –