質問

同様の問題の解決策を読みましたが、すべてスクリプトと追加のツールが関係しているようです。私はそれを避けるのに十分簡単な問題を望んでいます。

したがって、ユーザーは来週のデータのCSVをアップロードします。 DBに挿入されます。問題ありません。

しかし

1時間後、彼は全員からフィードバックを受け取り、それに応じて更新する必要があります。彼はcsvを更新し、DBにアップロードします。

今、私が使用しているシステムは、その週のデータが既に存在するかどうかを確認し、存在する場合は、DBからすべてのデータを取得し、スクリプトが違いを見つけて送信します。このすべての後、古いデータは削除され、新しいデータに置き換えられます。

明らかに、きれいに拭いてデータを再入力する方がはるかに簡単ですが、特に大量の変更や大量のデータがある場合は、最善の方法ではありません。しかし、アラートを送信するために何が変更されたかを知る必要があります。ただし、トランザクションログは必要ありません。アラートを送信する必要があるのは一度だけで、その後は古いデータは役に立たなくなります。

そう!

新しいデータを既存のデータと比較し、変更/削除/追加された行のみを取得し、それらの変更を行うスマートな方法はありますか?現時点では更新を行うことができるように思えますが、変更内容については何も返事がありません...

ありがとう!

クイック編集:

現在使用されている外部キーはありません。これはすぐに変更されますが、違いはないはずです。外部キーはデータの影響者のみを指し、したがって変更する必要がないからです。主キーに関する限り、それは少しジレンマを提示します:

問題のデータは、全員の作業スケジュールです。そのため、各シフトにキーがあると便利です(単純な出力を超えるこのスケジュールの特定のアプリケーションの場合)。しかし問題は、user1が月曜日に遅れたとしましょう。遅刻は別のテーブルに記録され、シフトキーを使用してシフトに関連付けられます。しかし、火曜日にすでに進行中の週に何らかの変更を加える必要がある場合、私の懸念は、既に発生したDB内のすべてのエントリを保証するのが難しくなりすぎるためです破損している)プロセスで再入力されます。残念ながら、これはアップロードを行う人々に仕事を追加する(したがって、市場性を低下させる)ため、現在の時間後に発生するすべてのイベントを更新するほど単純ではありません。基本的に、1つのプログラムでスケジュールを作成し、CSVにエクスポートしてから、そのデータを必要とするすべてのWebアプリケーションの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?

上記の具体的な答えよりも、この種のデータが通常どのように処理/アプローチされるかを知りたいです。

もう一度、ありがとう。

役に立ちましたか?

解決

  

今、私が使用しているシステムは、その週のデータが既に存在するかどうかを確認し、存在する場合は、DBからすべてのデータを取得し、スクリプトが違いを見つけて送信します。このすべての後、古いデータは削除され、新しいデータに置き換えられます。

あなたのスクリプトは違いを知っていますよね?また、スクリプトとMySQL以外に、余分なツールを使用したくないのですか?

MySQLはそれ自体で「diff」ツールを提供しないと確信しています。そのため、達成できる最善の方法は、更新専用の新しいCSVファイルを作成することです。つまり、変更された行のみを含める必要があります。更新がより迅速になり、変更されたすべてのデータが簡単に利用可能になります。

他のヒント

いずれかのフィールドに一意のキーがある場合、次を使用できます。

LOAD DATA LOCAL INFILE '/path/to/data.csv' REPLACE INTO TABLE table_name
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top