我正在将Google表格数据镜像到本地MySQL数据库中。我正在以JSON格式提取工作表数据,解析以提取我需要的信息并将其插入数据库。
我无法控制添加到工作表中的数据,并且可能在现有数据之间添加或删除行,或者在末尾添加行。所以我的问题是:如何比较工作表上的内容与数据库中已有的内容,这样我就不会得到重复或缺失的数据。
目前我正在将JSON数据解析为我需要的部分数组:
array(2) {
[1]=>
array(2) {
["date"]=>
string(9) "2016-10-8"
["location"]=>
string(15) "Berlin, Germany"
}
[2]=>
array(2) {
["date"]=>
string(10) "2016-10-22"
["location"]=>
string(13) "Nashville, TN"
}
}
然后我将其注入MySQL DB。
稍后,我想回来,再次获取远程数据,并将其与数据库中已有的数据进行比较,并删除数据集中不再存在的数据,并添加已添加的任何新数据。而这正是我努力奋斗的部分。我可以查询数据库并构建相同的数组格式进行比较,但由于它是一个多维数组,我不能使用array_diff()。
那么我应该如何最好地接近这个?我不认为循环遍历数据集并检查每一行是最有效的方法,但我认为这是一个选项。
答案 0 :(得分:0)
如果:不要这样做!是不可接受的答案......
您的代码必须可配置,灵活且干净,以便轻松维护。如果你可以避免这两个数据集之间的笛卡尔连接,那么可能有一些数据子集可以用作密钥或复合密钥?
您可以将spreedsheet中的所有数据放入PHP中的哈希映射中,然后“加入”非常快。
如果没有,每行的手动比较可能是最好的选择。
最后的建议。确保对DB的调用进行批处理。查询太长会导致数据库解析器失效。 (例如,如果你删除....在哪里...... id IN(10 000 ids))