0

我已经阅读了类似问题的解决方案,但它们似乎都涉及脚本和额外的工具。我希望我的问题足够简单以避免这种情况。

所以用户上传下周数据的 csv。它被插入数据库,没问题。

一个小时后,他得到了每个人的反馈,并且必须做出相应的更新。他更新了 csv 并将其上传到数据库。

现在,我正在使用的系统检查该周的数据是否已经存在,如果存在,则从数据库中提取所有数据,脚本会找到差异并将它们发送出去,毕竟这样,旧数据的数据将被删除并用新数据替换。

显然,将其擦干净并重新输入数据要容易得多,但这不是最好的方法,尤其是在有大量更改或大量数据的情况下。但我必须知道为了发送警报做了哪些更改。但是我不想要事务日志,因为警报只需要发送一次,之后旧数据就没用了。

所以!

是否有一种聪明的方法可以将新数据与现有数据进行比较,仅获取已更改/删除/添加的行并进行这些更改?现在看来我可以进行更新,但是我不会就发生的变化得到任何回应...

谢谢!

快速编辑:

当前没有外键在使用。这很快就会改变,但不会有什么不同,因为外键只会指向数据影响的对象,因此不需要更改。就主键而言,这确实带来了一些困境:

有问题的数据是每个人的工作时间表。因此,每个班次都有一个密钥会很好(对于这个时间表的特定应用,而不是简单的输出)。但问题是,假设 user1 周一迟到了。迟到记录在一个单独的表中,并使用 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?

我真的很想知道这种数据通常是如何处理/接近的,而不是上面的具体答案。

再次谢谢你。

4

2 回答 2

0

如果您在其中一个字段上有唯一键,则可以使用:

LOAD DATA LOCAL INFILE '/path/to/data.csv' REPLACE INTO TABLE table_name
于 2009-01-02T15:30:33.030 回答
0

现在,我正在使用的系统检查该周的数据是否已经存在,如果存在,则从数据库中提取所有数据,脚本会找到差异并将它们发送出去,毕竟这样,旧数据的数据将被删除并用新数据替换。

所以你的脚本知道这些差异,对吧?除了脚本和 MySQL 之外,您不想使用一些额外的工具,对吗?

我非常相信 MySQL 本身不提供任何“差异”工具,所以你能做到的最好的事情就是制作新的 CSV 文件只用于更新。我的意思是 - 它应该只包含更改的行。更新会更快,并且所有更改的数据都将很容易获得。

于 2009-01-02T15:31:54.710 回答