我正在将Google Sheets数据镜像到本地MySQL数据库中。我正在提取JSON格式的工作表数据,解析以提取我需要的信息,并将其插入到DB中。
我无法控制添加到工作表中的数据,可能会在现有数据之间添加或删除行,或者在末尾添加行。因此,我这里的问题是:如何将表上的内容与数据库中已有的内容进行比较,这样就不会出现重复或丢失的数据。
目前,我正在将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中。
稍后,我想回来,再次获取远程数据,并将其与数据库中已有的数据进行比较,删除数据集中不再存在的数据,然后添加任何已添加的新数据。这是我一直在努力解决的问题。我可以查询DB并构建相同的数组格式进行比较,但是因为它是多维数组,所以不能使用array_diff()。
那么,我应该如何最好地处理这个问题呢?我不认为遍历数据集并检查每一行是最有效的方法,但我认为这是一种选择。
发布于 2018-03-15 21:57:13
如果:不要这样做!不是一个可以接受的答案。
您的代码必须是可配置的、灵活的和整洁的,以便易于维护。如果您可以避免这两个数据集之间的笛卡尔连接,那么也许有一些数据子集可以用作键或组合键?
您可以将spreedsheet中的所有数据放入PHP中的hashmap中,然后"join“就会非常快。
如果不是,那么手动比较每一行可能是下一个最好的方法。
最后的建议。确保对DB的调用是批处理的。查询时间过长会导致DB解析器崩溃。(例如,如果您删除....其中....id IN (10000个ids))
https://stackoverflow.com/questions/49274129
复制相似问题