0

所以我的情况如下。我每 24 小时通过 PHP 从某个来源获取数据。现在,在此期间,这些数据发生了变化,添加了新数据或更新了一些数据。现在,当我每 24 小时运行一次查询以插入或更新此数据时,执行查询需要很长时间。如果执行时间适中,这将不是问题,因为我计划将此作为 cron 作业,但是现在的执行时间太长了。因此,当我获得它时,我正在考虑将这些数据从 PHP 写入 CSV 文件。然后将此 CSV 文件与MySQL LOAD DATA据称以非常快速的方式从文件中插入大量数据的功能一起使用。

所以问题是是否可以从 PHP 写入 CSV 文件并以适合该LOAD DATA INFILE功能的方式对其进行格式化,以及如何每 24 小时删除该 CSV 并使用新插入的数据创建一个新文件,我将如何对这个特定的 CSV 文件正确使用该LOAD DATA INFILE功能?哦,我可以从所有这些中做一个 cron 工作吗?谢谢。

4

2 回答 2

0

由于您可以阅读LOAD DATA语句,它非常灵活,您可以指定字段、行分隔符和许多其他功能。这将允许您以任何您想要的格式制作您的 csv。LOAD DATA确实是在mysql中插入数据最快的方法。

在 php 中,您可以非常简单地将数据写入此处所示的文件。

在此之后,您确实需要一个将文件加载到 mysql 中的 cron 作业,应该会有所帮助。

于 2013-05-30T08:18:10.297 回答
0

假设您从源接收数据并准备此数组:

$x=array(1=>array('1','2','3','4'), 2=>array('5','6','7','8'));

像这样创建一个 csv 文件:

    $file=fopen(<DIRECTORY_PATH>."file.csv","w");
    if(!$file){
       //error
    }

    $csv_data="";

    foreach($x as $row){
     foreach($row as $element){
        $csv_data.=$element.", ";
     }
    //remove the last comma
    $csv_data.="\n";

    }

    fwrite($file,$csv_data);

$query="load data infile '".<DIRECTORY_PATH>."file.csv"."' into table your_table";
if(!mysqli->query($query))
 printf("Error: %s\n", $mysqli->error);
于 2013-05-30T08:33:45.037 回答