0

我在 txt 文件中有一个产品名称列表。但是,该文件很大(4,8GB++),所以是的,它有很多字。除了产品名称,我还想添加一些附加信息,例如 md5 哈希、时间和随机 ID。

这样做的最佳解决方案是什么?创建一个逐行阅读的 PHP 脚本,似乎需要很长时间。

有什么好的建议吗?

4

3 回答 3

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      |
+--------+-------------+------------+
于 2013-03-16T21:24:18.510 回答
0

我对您的问题进行了更多考虑,我以前使用过此解决方案,但由于文件的大小,我不确定它是否适合您。我暂时把它留在这里,以防它对其他人有用。

假设您的 product.txt 文件只有 productIDs 而没有其他您可以:

  1. 将每一行更改为用括号括起来(这可以通过查找/替换 NEWLINE(通常为\n)来实现),\n( )
  2. 然后在顶部放置一个查询;并确保文件的末尾关闭了一个有效的查询
  3. 像任何 mysqldump 一样使用 mysql 导入

基本改变

PID1
PID2

(PID1),
(PID2),

然后通过一些简单的编辑使文件读取

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

最后导入

mysql -uUser -p DATABASE < filename.sql

这是一种基本的方法,但应该没有太多麻烦。之后在 SQL 中添加您想要的其余数据会更简单。

于 2013-03-16T21:28:00.453 回答
0

如果您使用的是 mysql 并且文件是 CSV 类型,那么您可以使用LOAD DATA INFILE.

如果您有格式良好的 CSV,则根本不需要 PHP。

让我知道是否是这种情况,我可以添加更多细节。

于 2013-03-16T21:50:02.750 回答