2013-03-16 35 views
0

我有一個產品名稱列表在txt文件中。但是,該文件是巨大的(4,8GB ++),所以是的,這是很多的話。隨着產品名稱,我想添加一些額外的信息,如md5散列,時間和隨機ID。將產品名稱獲取到數據庫中

這樣做最好的解決方案是什麼?逐行創建一個PHP腳本逐行閱讀似乎需要永遠。

任何建議嗎?

+0

不確定您是否打算將隨機ID用於產品代碼,但是如果您是因爲您可能會發生衝突而受傷。 – James 2013-03-16 21:18:51

+0

慢慢來。 4 GB的文件需要花費大量的時間在**逐行**上進行迭代。 – hjpotter92 2013-03-16 21:20:18

+0

我將使用隨機代碼,以及日期,時間信息等,所以不應該有崩潰。我也可以用單詞的長度或散列來組合它。 – 2013-03-16 21:20:36

回答

0

是的,你可以使用PHP來讀取一個文本文件,並把它傳遞到數據庫

$string = file_get_contents("YOURTEXTFILE", "r"); 
$myFile = "PATH/TO/YOUR/TEXTFILE"; 
$fh = fopen($myFile, 'w') or die("Could not open: " . mysql_error()); 
fwrite($fh, $string); 
fclose($fh); 

$sql = mysql_connect("localhost", "root", "password"); 
if (!$sql) { 
    die("Could not connect: " . mysql_error()); 
} 
mysql_select_db("YOURDB"); 
$result = mysql_query("LOAD DATA INFILE '$myFile'" . 
         " INTO TABLE test FIELDS TERMINATED BY '|'"); 
if (!$result) { 
    die("Could not load. " . mysql_error()); 

}

,結果會是這樣

+--------+-------------+------------+ 
|  ID | Name  | time  | 
+--------+-------------+------------+ 
| 145 | line1  | 23:59  | 
| 234 | line2  | 00:00  | 
+--------+-------------+------------+ 
+0

那麼如果我想散列這個詞,以及一個ID呢?創建一個uniq散列 – 2013-03-16 21:33:37

+0

.... ['mysql_error()'](http://php.net/manual/en/function.mysql-error.php)if false === ['fopen'](http ://php.net/manual/en/function.fopen.php)? – 2013-03-16 21:50:15

0

我已經把更多地考慮到你的問題,我以前使用過這個解決方案,但我不確定它是否適合你,因爲你的文件的大小。現在我將把它留在這裏以防萬一它對別人有用。

假設你product.txt文件只有productIDs,沒有別的,你可以:NEWLINE的

  1. 改變各行要由括號(這可以通過做一個發現可以實現環繞/替換(通常\ ()爲),\ n(
  2. 然後在頂部放置查詢;並確保文件的結尾關閉一個有效的查詢
  3. 導入與像任何的mysqldump MySQL的

基本不變

PID1 
PID2 

(PID1), 
(PID2), 

,然後用一些簡單的編輯使文件讀取

INSERT INTO dTable(ColName) VALUES 
(PID1), 
(PID2); 

最後導入

mysql -uUser -p DATABASE < filename.sql 

這是一個基本的方法,但沒有太多的麻煩應該工作。之後添加剩餘的數據將在SQL中更簡單。

0

如果您使用的是mysql並且該文件是CSV類型,那麼您可以使用LOAD DATA INFILE

如果你有一個格式良好的CSV,你根本不需要PHP。

讓我知道如果是這樣的話,我可以添加更多的細節。