Несколько CSV в MySQL с разными столбцами

Я использую оператор «load data infile» для загрузки нескольких файлов .csv в одну таблицу с помощью цикла foreach. Это работает, только у меня есть одна проблема. Столбцы в .csv не совпадают. Например, у меня есть это:

CSV1:

Идентификатор, имя, ЕАН, описание

CSV2:

Идентификатор, имя, образ, ЕАН, описание

И моя таблица MySQL:

Идентификатор, имя, ЕАН, описание

Так как я хочу импортировать несколько CSV через цикл, у меня проблема с CSV2 из-за столбца изображения. Если возможно, я хочу сопоставить имя столбца CSV с именем столбца таблицы. Таким образом, в этом примере [изображение] не импортируется. Я могу использовать переменную @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?

Большое спасибо за помощь мне!

С уважением,
отметка

0

Решение

Я думаю, что понял вопрос. Вы не хотите получать заголовки столбцов из первой строки CSV, а затем строите строку для использования в качестве col_name_or_user_var аргумент LOAD DATA и используйте @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);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]