gpt4 book ai didi

php - 具有不同列的多个 CSV 到 MySQL

转载 作者:行者123 更新时间:2023-11-29 22:38:56 25 4
gpt4 key购买 nike

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

CSV1:

id,name,ean,description

CSV2:

id,name,image,ean,description

我的 MySQL 表是:

id,name,ean,description

因此,因为我想通过循环导入多个 csv,所以由于图像列,我遇到了 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、名称、状态、ean、favorite_color、描述

变成...

(id、名称、@bunk、ean、@bunk、描述)

$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);

关于php - 具有不同列的多个 CSV 到 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29438288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com