我正在尝试从以json格式保存的大型数组中将数据导入我的MySQL数据库。我用JavaScript编写了一个小脚本,通过该数组并通过AJAX调用发送所有相关数据。我的php文件获取1条记录的数据,检查所有字段是否有效,然后继续将其插入到我的主表中。数据还可能包含链接到主条目的信息。也许0,也许是多行,无论哪种情况,所有这些都经过验证并插入到另一个表中,引用主条目的id。
我将尝试提出一个简单的例子来更好地说明我正在尝试做的事情:
要插入的数据:
source : { id: 0, f1: 50, f2: 100, f3: 310,
linked : [ l1: { d: "B", v: 32.50}, l2: { d: "C", v: 27.30} ]
}
以下是我的php文件在简化版中的作用:
if(valid($source)){ // validate passed data and proceed if they are valid
//check passed id (id == 0 => insert, id > 0 => update)
if($source['id'] == 0){
//INSERT new row into main_table
$last_id = $pdo->lastInsertId(); //get new id
//if there is additional data, insert each row into link_table
if(!empty($source['linked']){
foreach($source['linked'] ...){
//validate linked data
//INSERT INTO link_table (main_id, ...) VALUES(:source_id, ...);
}
}
} else if($source['id'] > 0){
//attempt UPDATING existing row in main_table where id = source.id
$last_id = $source['id'];
//...UPDATE linked data in link_table (where main_id = $last_id)
}
}
这样在处理单个记录时工作正常。 (注意:我现在只想插入新行,所以UPDATE部分在这里不相关。)我不知道插入数千行的最佳方法是什么,所以没有更好的选择,我的脚本会为每条记录发送一个AJAX调用。我知道这在很多方面都是可怕的,但它确实有效。毋庸置疑,我的本地网络服务器以这种方式变得非常繁忙,插入4000多行需要30多分钟。我是通过AJAX来做的,因为我不知道如何插入我的json数据 - 这需要一些修改开始...... - 使用更好的方法。我打赌使用正确的查询不会超过几秒钟,但我如何构建一个查询,将所有内容插入到我的main_table
中,并将所有链接的行插入到link_table
中,基于main_table
id?
答案 0 :(得分:0)
你可以做几件事:
对于第2点,请注意一次可以运行的数量有限制...我不记得它现在是什么,它可能依赖于服务器配置...尝试使用100到从那里开始,然后从那里开始。