2013-12-11 7 views
3

csv 파일을 테이블에로드하는 올바른 구문을 찾는 중 테이블에 이미있는 첫 번째 열을 건너 뛰는 동안 문제가 발생했습니다.테이블의 첫 번째 열을 건너 뛰는 LOAD DATA INFILE

ID COL1 COL2 COL3 LOG_DATE 

내 CSV는 다음과 같습니다 : 내 테이블 컬럼은 다음과 같다

dataForCol1,dataForCol2,dataForCol3 

그래서 내가 ID를 건너 뛰는, COL1 COL2와 COL3로 CSV의 값을로드 할. 내가 너무 잘 SQL을 잘 모릅니다 내가 제대로 중 하나 SET 절을 사용하고 있다면 나는 잘 모르겠지만,이 사항이 함께 LOG_DATE 열을 공급한다

LOAD DATA LOCAL INFILE 'test.csv' 
INTO TABLE test_table 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n' 
(ID,COL1,COL2,COL3,LOG_DATE) 
SET ID=0, LOG_DATE=CURRENT_TIMESTAMP 

참고 : 내가 얻을 수있는 가장 가까운이 같은 SQL 함께 타임 스탬프, 그리고 자동차는 ID 열을 증가 (IDtype: int(11이다) 및 auto_incerement) 그러나 다른 데이터는 하나의 열에 의해 너무 dataForCol1 누락 꺼지고 dataForCol2COL1

답변

10

인 것 열 목록은 열 iclude해야 파일에만 있습니다 :

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 
0

이 동일한 문제를 해결할 수있는 유일한 방법은 임시 테이블을 만들어 모든 데이터를로드 한 다음 해당 데이터를 영구 테이블에 삽입하는 것입니다. 당신의 필드를 정의하지 않고

EG: COL1 COL2 COL3 ID LOG_DATE 

그런 다음 같은 코드를 사용하여 간단하게 이런 식으로 마지막 필드 위치에 ID의 안부를 이동

# 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

: 나는 다중 파일 업로드 프로세스와 함께이 사용되었다 또는 id :

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

매우 쉽고 훌륭합니다.

관련 문제