0

同様の問題の解決策を読みましたが、それらはすべてスクリプトと追加のツールを必要とするようです。私の問題がそれを避けるのに十分単純であることを願っています。

そのため、ユーザーは来週のデータの csv をアップロードします。問題なくDBに挿入されます。

しかし

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

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

明らかに、消去してデータを再入力する方がはるかに簡単ですが、特に変更が多い場合や大量のデータがある場合は、最善の方法ではありません。しかし、アラートを送信するためにどのような変更が行われたかを知る必要があります。しかし、トランザクション ログは必要ありません。アラートを送信する必要があるのは 1 回だけで、その後は古いデータは役に立たないからです。

そう!

新しいデータを既存のデータと比較し、変更/削除/追加された行のみを取得し、それらの変更を行うスマートな方法はありますか? 今のところ、更新はできるようですが、何が変わったのかについて何の反応も得られません...

ありがとう!

クイック編集:

現在使用中の外部キーはありません。これはすぐに変更されますが、外部キーはデータの影響を示すだけであり、変更する必要がないため、違いはありません。主キーに関する限り、これには少しジレンマがあります。

問題のデータは、全員の勤務スケジュールです。したがって、各シフトにキーがあると便利です (単純な出力を超えたこのスケジュールの特定のアプリケーションの場合)。しかし問題は、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?

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

再びありがとう。

4

2 に答える 2

0

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

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

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

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

私は、MySQL 自体が「差分」ツールを提供していないことを確信しているため、更新専用の新しい CSV ファイルを作成することをお勧めします。つまり、変更された行のみを含める必要があります。更新がより速くなり、変更されたすべてのデータが簡単に利用できるようになります。

于 2009-01-02T15:31:54.710 に答える