2012-01-15 46 views
0

我一直在試驗LOAD DATA INFILE,並且有幾件事情我希望能夠做到。我不確定它們是否可行,或者我可能需要爲上傳創建臨時表。LOAD DATA INFILE/PHP MySQLi /爲輸入和處理NULL值添加額外的列/值

當CSV文件上傳/輸入在我的應用程序,我想有一個自動遞增列的行。另外,我想爲每行添加一個列值來標識上傳文件的用戶。

我在InnoDB數據庫上使用PHP/MySQLi。

我的CSV文件中也可能爲空值的空字符串。有沒有簡單的方法將這些值作爲NULL輸入到數據庫中?

感謝您的幫助!

回答

0

爲了實現您想要的功能,您需要在將數據加載到數據前先以編程方式預先創建表以及觸發器功能。

因此,首先要創建表的觸發器:

例如:

CREATE TABLE foo (
    id INT NOT NULL AUTO_INCREMENT, 
    fooitems TEXT, 
    PRIMARY KEY (id) 
); 

CREATE TRIGGER fooblank2null 
BEFORE INSERT ON foo 
FOR EACH ROW 
SET NEW.fooitems=IF(TRIM(NEW.fooitems)='',NULL,NEW.fooitems); 

測試是否觸發工作:

INSERT INTO foo (fooitems) 
VALUES 
('i'),(''),('am'),('foo'),(' '),('.'); 

您現在可以將數據加載到特定的列。

例如:

LOAD DATA 
INFILE 'foo.txt' 
INTO TABLE foo 
FIELDS TERMINATED BY ',' ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
(fooitems); 
+0

感謝您的幫助!有一件事,我怎麼能插入另一個int值插入每一行插入的列,所以我可以跟蹤哪些文件的條目來自。 – christian 2012-01-15 22:56:21

+0

我在最後得到了一個額外的設置條款。謝謝! – christian 2012-01-16 03:27:41