繁体   English   中英

具有不同列的多个CSV到MySQL

[英]Multiple CSV to MySQL with Different Columns

我使用“ load data infile”语句通过foreach循环将多个.csv文件加载到一个表中。 这有效,只有我有一个问题。 .csv中的列不相同。 例如我有这个:

CSV1:

id,名称,ean,描述

CSV2:

id,名称,图像,ean,描述

我的MySQL表是:

id,名称,ean,描述

因此,由于我想通过循环导入多个csv,因此由于image列,CSV2出现了问题。 如果可能,我想将csv列的名称与表列的名称匹配。 因此,在此示例中,未导入[image]。 我可以使用@ignore变量,但是由于每个.csv都不相同,因此无法正常工作。 我有这个:

$sql = "
   LOAD DATA LOCAL INFILE '$value[path]'
       INTO TABLE db1.shoptest
       FIELDS TERMINATED BY '$value[seperator]'
       OPTIONALLY ENCLOSED BY '\"'
       LINES TERMINATED BY '\n'
     (id, name, ean, description)
    ;";

是否可以将csv列名与表列名匹配,并跳过.csv中的所有其他列?

非常感谢您的帮助!

亲切的问候,马克

我想我明白这个问题。 您不会从CSV的第一行获取列标题,而是构建一个字符串用作LOAD DATA的col_name_or_user_var参数,并根据需要使用@ignore变量分配。

id, name, state, ean, favorite_color, description

变成...

(id, name, @bunk, ean, @bunk, description)

$whiteList = ['id', 'name', 'ean', 'description'];
$columnHeader = 'id, name, state, ean, favorite_color, description';
$columnHeader = explode(',', $s);
foreach ($columnHeader as $k => $v) {
    if (! in_array(trim($v), $whiteList)) $columnHeader[$k] = '@bunk';

}

echo implode(',', $columnHeaders);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM