我已经阅读了类似问题的解决方案,但它们似乎都涉及脚本和额外的工具。我希望我的问题足够简单,以避免这种情况。
因此用户上传了下周数据的csv。它被插入到DB中,没问题。
BUT
一小时后,他得到了所有人的反馈,并且必须相应地进行更新。他更新了csv并将其上传到数据库。现在,我正在使用的系统检查该周的数据是否已经存在,如果是,则从数据库中提取所有数据,脚本找到差异并将其发送出去,在所有这些之后,旧数据被删除并用新数据替换。
显然,清理它并重新输入数据要容易得多,但不是最好的方法,特别是如果有大量的变化或大量的数据。但我必须知道发出警报的变化。但我不想要一个事务日志,因为警报只需要一次发送,之后,旧数据就没用了。
原来如此!
是否有一种智能方法可以将新数据与现有数据进行比较,只获取已更改/删除/添加的行,并进行这些更改?现在似乎我可以做一个更新,但后来我不会对变化的内容得到任何回应......
谢谢!
快速编辑:
目前没有使用外键。这很快就会改变,但它不应该有所作为,因为外键只会指向数据效果的人,因此不需要更改。就主键而言,这确实存在一些困境:
有问题的数据是每个人的工作时间表。因此,对于每个班次来说,拥有密钥会很好(对于超出简单输出的此计划的特定应用)。但问题是,让我们说用户1周一晚了。延迟记录在一个单独的表格中,并使用shift键与班次相关联。但如果周二有一些需要对已在进行中的那一周进行一些更改,我担心的是,确保已经发生的数据库中的所有条目都变得太难了(因此可能会有不应该有的关联)将被打破)将在此过程中重新键入。不幸的是,它并不像仅更新当前时间之后发生的所有事件一样简单,因为这会增加上传人员的工作量(从而降低其市场价值)。基本上,他们在一个程序上制定计划,将其导出为CSV,然后将其上载到需要该数据的所有Web应用程序的网页上。因此,每次导出整个星期并上传它时,对他们来说(对每个参与者来说压力较小)都会更加容易。
所以我最关心的是让两端的上传脚本尽可能智能化。尝试查找更改时不会变得臃肿,无论输入如何都可以找到更改,没有任何未更改的数据可能会重新键入。
以下是相关问题:
Suppose Joe User was schedule to wash dishes from 7:00 PM to 8:00 PM, but the new
data has him working 6:45 PM to 8:30 PM. Has the shift been changed? Or has the old
one been deleted and a new one added?
还有一个:
Say Jane was schedule to work 1:00 PM to 3:00 PM, but now everyone has a mandatory
staff meeting at 2:00 to 3:00. Has she lost one shift and gained two? Or has one
shift changed and she gained one?
我真的很想知道这种数据通常是如何处理/接近的,而不仅仅是对上述内容的具体答案。
再次,谢谢。
答案 0 :(得分:0)
如果您在其中一个字段上有唯一键,则可以使用:
LOAD DATA LOCAL INFILE '/path/to/data.csv' REPLACE INTO TABLE table_name
答案 1 :(得分:0)
现在,我正在使用的系统检查该周的数据是否已经存在,如果是,则从数据库中提取所有数据,脚本找到差异并将其发送出去,在所有这些之后,旧数据被删除并用新数据替换。
所以你的脚本知道差异,对吗?而且你不想使用一些额外的工具,除了你的脚本和MySQL,对吗?
我非常确信MySQL本身并不提供任何“差异”工具,因此您可以实现的最佳目标是仅为更新制作新的CSV文件。我的意思是 - 它应该只包含已更改的行。更新会更快,所有更改的数据都可以轻松获得。