[英]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.