2012-05-20 164 views
0

我已經搜索了幾個小時,但它不起作用。LOAD DATA LOCAL INFILE不能跳過列?

我有一個總統任職的csv文件。第一行是標題。

Presidency ,President ,Wikipedia Entry,Took office ,Left office ,Party ,Portrait,Thumbnail,Home State 

我想創建只有PresidencyPresidentParty的關係。

$sqlquerycreate1 = "CREATE TABLE IF NOT EXISTS `sample1` (
    `Presidency` VARCHAR(30), 
    `President` VARCHAR(30), 
    `Party` VARCHAR(30) 
)"; 
mysql_query($sqlquerycreate1); 

# download the file off the internet 
$file = file_get_contents("http://localhost/sample.csv"); 
$filepath = "sample.csv"; 
file_put_contents($filepath, $file); 

# load the data into nycgrid table 
$pt11 = "LOAD DATA LOCAL INFILE "; 
$pt21 = "'C:/xampp/htdocs/test/file/sample.csv' INTO TABLE sample1(Presidency,President,@Wikipedia Entry,@Took office ,@Left office ,Party,@Portrait,@Thumbnail,@Home State) "; 
$pt31 = "FIELDS TERMINATED BY ',' ENCLOSED BY '\"' "; 
$pt41 = "LINES TERMINATED BY '\r\n' "; 
$pt51 = "IGNORE 1 LINES"; 
$sqlquerynew1 = $pt11.$pt21.$pt31.$pt41.$pt51; 
mysql_query($sqlquerynew1); 

它不起作用。該表已創建,但未加載數據。 任何想法爲什麼?謝謝。


mysql> LOAD DATA LOCAL INFILE 'C:/xampp/htdocs/sample.csv' INTO TABLE sample1(Pr 
esidency, President, @x, @x, @x, Party, @x, @x, @x) FIELDS TERMINATED BY ',' ENC 
LOSED BY '\"' LINES TERMINATED BY '\n' IGNORE 1 LINES; 


ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that 
corresponds to your MySQL server version for the right syntax to use near 'FIELD 
S TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\n' IGNORE 1 LINE' at 
line 1 

回答

5

您的LOAD DATA語句的語法錯誤。特別是:

  1. the manual指出:

    用戶變量被寫成@var_name,其中變量名var_name包括字母數字字符,「.」,「_」,和「$」。用戶變量名可以包含其他字符,如果你引用它作爲一個字符串或標識符(例如,@'my-var'@"my-var",或@`my-var`

    因此您的命名@Wikipedia Entry@Took office@Left office@Home state變量都是語法不正確。您必須刪除空格或引用變量名稱。

    但是,除非您打算在其他地方引用它們,否則不需要使用不同的變量名稱。正如the manual指出:

    LOAD DATA INFILE 'file.txt' 
        INTO TABLE t1 
        (column1, @dummy, column2, @dummy, column3); 
    
  2. FIELDSLINES和:

    也可以通過將其分配給用戶變量,而不是分配變量以表列丟棄的輸入值IGNORE子句應該全部爲前面的的列表。作爲the manual指出,語法是:

    LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name' 
        [REPLACE | IGNORE] 
        INTO TABLE tbl_name 
        [CHARACTER SET charset_name] 
        [{FIELDS | COLUMNS} 
         [TERMINATED BY 'string'] 
         [[OPTIONALLY] ENCLOSED BY 'char'] 
         [ESCAPED BY 'char'] 
        ] 
        [LINES 
         [STARTING BY 'string'] 
         [TERMINATED BY 'string'] 
        ] 
        [IGNORE number LINES] 
        [(col_name_or_user_var,...)] 
        [SET col_name = expr,...]

因此,你可以簡單地做:

LOAD DATA LOCAL INFILE 'C:/xampp/htdocs/test/file/sample.csv' 
    INTO TABLE sample1 
    FIELDS 
     TERMINATED BY ',' 
     ENCLOSED BY '\"' 
    LINES 
     TERMINATED BY '\r\n' 
    IGNORE 1 LINES 
    (Presidency, President, @x, @x, @x, Party, @x, @x, @x) 
+0

感謝。我用你的代碼替換了'INTO TABLE ...'部分,它仍然不起作用。另外,你是否覺得'LOAD DATA LOCAL INFILE'後面不需要空格?我相信我需要它們是因爲我稍後將它們連接起來。 – user1012451

+0

謝謝。是。我確定,因爲如果我讓它導入所有列,我可以導入。 – user1012451

+0

謝謝。我更新了錯誤信息。太奇怪了。 – user1012451