簡體   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