MYSQL: загрузить данные infile - определить целевые столбцы / сопоставление полей [дубликат]

  • Краткий ответ: для ошибки «не удается найти зависимую библиотеку» проверьте свой $ PATH (соответствует пункту № 3 маркировки ниже)
  • Длинный ответ: чистый мир java: jvm использует " Classpath ", чтобы найти файлы классов JNI world (java / native boundary): jvm использует« java.library.path »(который по умолчанию равен $ PATH), чтобы найти dlls чистый родной мир: собственный код использует $ PATH для загрузки других dlls
3
задан BryanK 11 December 2013 в 21:18
поделиться

3 ответа

В списке столбцов должны быть только столбцы, которые находятся только в файле:

LOAD DATA LOCAL INFILE 'test.csv'
INTO TABLE test_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n' 
(COL1,COL2,COL3)
SET LOG_DATE=CURRENT_TIMESTAMP
10
ответ дан palindrom 22 August 2018 в 10:05
поделиться

Единственный способ решить эту проблему - создать временную таблицу для загрузки всех данных, а затем вставить эти данные в постоянную таблицу. Я использовал это в сочетании с процессом многофайловой загрузки:

# Check for attempted file/s upload
if (isset($_FILES['files']))
{
    # Create a temporary table to insert data into
    $sql="CREATE TEMPORARY TABLE `Temp` (Region VARCHAR(60), First_Name VARCHAR(35), Last_Name VARCHAR(35), Title VARCHAR(60), Account_Name VARCHAR(60), Phone VARCHAR(21), Email VARCHAR(60));";
    $Result = mysql_query($sql,$MySQL_Read);

    # Loop through file/s to be uploaded
    foreach ($_FILES['files']['tmp_name'] as $key => $tmp_name)
    {

        # Upload file
        move_uploaded_file($tmp_name, $Path."{$_FILES['files']['name'][$key]}");
        echo $Path."{$_FILES['files']['name'][$key]}<br>";

        # LOAD DATA from CSV file into Temp
        $sql="LOAD DATA INFILE '".$Path."{$_FILES['files']['name'][$key]}' INTO TABLE `Temp` FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '\\\\' LINES TERMINATED BY '\\r' STARTING BY '' IGNORE 1 LINES;";
        $Result = mysql_query($sql,$MySQL_Write);
        echo($sql.'<br><br>');

        # Delete file
        unlink($Path."{$_FILES['files']['name'][$key]}");
    }
}

# Insert data from temp table into permanent table
$sql="INSERT INTO `Leads` (`Region`, `First_Name`, `Last_Name`, `Title`, `Account_Name`, `Phone`, `Email`) SELECT `Region`, `First_Name`, `Last_Name`, `Title`, `Account_Name`, `Phone`, `Email` FROM `Temp`;";
$Result = mysql_query($sql,$MySQL_Write);

# Delete temporary table
$sql="DROP TEMPORARY TABLE Temp;";
$Result = mysql_query($sql,$MySQL_Write);
0
ответ дан user3092711 22 August 2018 в 10:05
поделиться

Просто переместите свой идентификатор в последнее поле так:

EG: COL1    COL2    COL3    ID    LOG_DATE

Затем используйте тот же код, не определяя свои поля или id:

LOAD DATA LOCAL INFILE 'test.csv'
INTO TABLE test_table
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n' 
SET LOG_DATE=CURRENT_TIMESTAMP

Super easy и отлично работает.

0
ответ дан user6377854 22 August 2018 в 10:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: