所以我的情况如下。我每24小时通过PHP从某个来源获取数据。现在,在此期间,此数据会发生变化,添加新数据或更新某些数据。现在,当我运行查询以每24小时插入或更新此数据时,查询执行需要很长时间。如果执行时间适中,这不会成为问题,因为我计划将其作为一个cron作业,但现在执行时间太长了。
所以当我获得它时,我正考虑将这些数据从PHP写入CSV文件。然后将此CSV文件与MySQL LOAD DATA
函数一起使用,该函数可以非常快速地从文件中插入大量数据。
所以问题是可以从PHP写入CSV文件并以适合LOAD DATA INFILE
功能的方式对其进行格式化,我怎样才能每24小时删除该CSV并创建一个新的CSV新插入的数据,以及如何在这个特定的CSV文件中正确使用LOAD DATA INFILE
函数?哦,我可以在这一切中完成一个cron工作吗?感谢。
答案 0 :(得分:0)
由于您可以非常灵活地阅读LOAD DATA语句,因此您可以指定字段,行分隔符和许多其他功能。这将允许您以任何格式制作您想要的csv。LOAD DATA
确实是在mysql中插入数据的最快方式。
在php中,您可以非常简单地将数据写入文件,如显示here。
在此确实你需要一个将在mysql中加载文件的cron作业,this应该会有所帮助。
答案 1 :(得分: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);