单列CSV到两列MySql表数据存储

时间:2012-11-23 13:40:41

标签: php mysql sorting csv

我有一个csv文件,其中包含一列中的2000个数据。数据格式如下:

name 100/1
name 100/2
name 105/6 
 ...

所以一般格式是'text integer_one / integer_two'现在我希望它存储在一个包含2列的mysql数据库表中。 column_1应该具有数据integer_one,而column_2应该具有数据integer_two

如何使用php将数据推送到mysql?

4 个答案:

答案 0 :(得分:0)

看看preg_match,您应该能够使用相当简单的正则表达式来获取这些值,例如:

preg_match(/\w+\s*(\d+)\\\/(\d+)/, $row, $matches);

var_dump($matches);

要从文件中提取数据,请查看fgets,有一个逐行读取文件的示例,以获取上述代码中的$row变量。

然后,您可以使用INSERT语句将每一行写入数据库。

需要考虑的一些事项:

文件有多大? 您需要多久插入一次这样的数据 - 这是一次性的吗?

这些事情将影响您构建代码的方式;有多种方法可以批量插入数据,如果这只是一次性运行,那么我建议使用sed或类似方法对文本数据进行maniuplating,然后使用所选数据库的本机方法进行批量插入(对于mysql,请参阅LOAD DATA INFILE,或使用客户端中的\.选项

如果文件很大并且您需要定期插入内容,请查看使用预准备语句和/或多个插入语法:

INSERT INTO mytable (name, number, anothernumber) VALUES('paul', 1, 2),('bob',2,1)

答案 1 :(得分:0)

使用ph函数fgetcsv函数读取csv文件(示例在此页面中给出)然后取每个in循环并使用函数explode()解析它并从中创建查询并保存在数据库中< / p>

答案 2 :(得分:0)

首先从提取您的值开始。如果您的所有数据的格式都与示例相同,则可以使用简单的explode

$lines = explode(",", $data); // $data should be your file extracted into a string
foreach ($lines as $line) {
    $temp = explode(" ", $line);
    $name = $temp[0];
    $temp_2 = explode("/", $temp[1]);
    $integer_1 = $temp_2[0];
    $integer_2 = $temp_2[1];

    $query = "INSERT INTO table_two_columns SET name = '{$name}', integer_1 = '{$integer_1}', integer_2 = '{$integer_2}'";
}

那是我对你的问题的看法。

答案 3 :(得分:0)

查看fopen()fread()fgetcsv() php函数来处理文件,你应该能够循环遍历cvs文件的行,如果你有控制你的服务器配置,我建议你看一下SplFileObject,因为你可以更有效/更优雅地处理文件,并且面向对象。但要求您启用SPL。最后一个是我的建议,因为你可以读取这样的文件:

function random_name(){
            $file_name = "names.csv";
            if(is_readable($file_name)){
                $file = new SplFileObject($file_name);


                $file->seek($file->getSize());
                $linesTotal = $file->key();

                $file->seek(rand(1,$linesTotal-1));
                $line = $file->fgetcsv();

                return $line[4];
            }
        }

这是我的示例脚本,用于从1000名cvs文件中获取随机名称。

当你循环并获取文件信息时,你可以使用explode(),这个函数用你定义的分隔符分隔你的字符串,在你的情况下它将是:

$array = explode("/", $myLine);

你会这样访问:

$array[0] or $array[1] to get the value