【问题标题】:Single column CSV to two column MySql table data store单列 CSV 到两列 MySql 表数据存储
【发布时间】:2012-11-23 13:40:40
【问题描述】:

我有一个 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 中?

【问题讨论】:

标签: php mysql sorting csv


【解决方案1】:

首先从提取您的价值观开始。如果您的所有数据都按照您的示例进行格式化,您可以使用简单的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}'";
}

这就是我对你的问题的看法。

【讨论】:

    【解决方案2】:

    使用 ph 函数 fgetcsv 函数读取 csv 文件(示例在本页中给出),然后在循环中使用每个函数并使用函数 explode() 对其进行解析,并从中创建查询并保存在数据库中

    【讨论】:

      【解决方案3】:

      看看preg_match,你应该可以使用一个相当简单的正则表达式来获取这些值,比如:

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

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

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

      需要考虑的一些事项:

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

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

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

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

      【讨论】:

        【解决方案4】:

        看看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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-06-19
          • 1970-01-01
          • 2016-01-05
          • 1970-01-01
          • 2018-11-02
          • 1970-01-01
          相关资源
          最近更新 更多