Frage

Ich habe durch die Lösungen für ähnliche Probleme lesen, aber sie scheinen alle Skripte und zusätzliche Tools einzubinden. Ich hoffe, mein Problem einfach genug, um das zu vermeiden.

So ist der Benutzer lädt eine CSV-Daten in der nächsten Woche. Es wird in die DB eingefügt, kein Problem.

Eine Stunde später wird er Feedback von allen, und muß entsprechend aktualisiert werden. Er aktualisiert die csv und geht es an die DB zu laden.

Im Moment ist die System-I prüft bin mit, um zu sehen, ob die Daten für diese Woche bereits vorhanden sind, und wenn es ist, ziehen all diese Daten aus der DB, findet ein Skript, um die Unterschiede und sendet sie aus, und nach all dies, werden die Daten der alten Daten gelöscht und durch die neuen Daten ersetzt.

Natürlich ist es viel einfacher, nur um es sauber zu wischen und die Daten erneut eingeben, aber nicht die beste Methode, vor allem, wenn es viele Änderungen oder Tonnen von Daten sind. Aber ich muss wissen, welche Änderungen vorgenommen wurden Warnungen auszusenden. Aber ich will nicht ein Transaktionsprotokoll, wie die Warnungen nur das ein Mal gesendet werden müssen, und danach, die alten Daten sind nutzlos.

So!

Gibt es eine intelligente Art und Weise die neuen Daten zu den bereits vorhandenen Daten zu vergleichen, erhalten nur die Zeilen, die gelöscht werden geändert / / hinzugefügt, und diese Änderungen machen? Im Augenblick scheint es, wie ich konnte ein Update tun, aber dann bekomme ich keine Antwort auf das, was hat sich verändert ...

Danke!

Quick Edit:

Keine Fremdschlüssel sind derzeit im Einsatz. Das wird sich bald ändern, aber es sollte keinen Unterschied machen, weil die Fremdschlüssel nur auf die Effekte die Daten zeigen wird und somit nicht geändert werden müssen. Soweit Primärschlüssel geht, dass ein bisschen ein Dilemma, jedoch ist:

Die in Frage stehenden Daten sind jedermanns Arbeitsplan. So wäre es (für bestimmte Anwendungen dieses Zeitplan über die einfache Ausgabe) schön für jede Verschiebung um einen Schlüssel zu haben. Aber das Problem ist, sagen wir, dass user1 am Montag spät war. Die Langsamkeit ist in einer separaten Tabelle aufgezeichnet und an die Verschiebung mit der Shift-Taste gebunden. Aber wenn am Dienstag, dass eine Notwendigkeit besteht, einige Änderungen an die Woche bereits Fortschritte zu machen, meine Angst ist, dass es zu schwierig wird, um sicherzustellen, dass alle Einträge in der DB, die bereits stattgefunden hat (und damit haben Verbände, sollte nicht gebrochen wird) wird in dem Prozess erhält erneut eingegeben. Leider ist es nicht so einfach wie nur alle Ereignisse zu aktualisieren nach der aktuellen Zeit auftreten, da diese Arbeit hinzufügen würde (und damit weniger marktfähig machen) zu den Menschen, die das Hochladen tun. Im Grunde machen sie den Zeitplan auf ein Programm, exportieren sie in eine CSV, und dann laden Sie sie auf einer Webseite für alle der Webapps, die brauchen diese Daten. So ist es einfach viel einfacher für sie (und weniger Stress für alle Beteiligten) die ganze Woche die gleiche Routine jedes Mal zu tun, in der Ausfuhr und dem Hochladen.

So ist meine größte Sorge ist die Upload-Skript so intelligent wie möglich an beiden Enden zu machen. Es wird nicht aufgebläht versucht, die Änderungen zu finden, kann er die Änderungen ganz gleich den Eingang und keine der Daten finden, die unverändert Risiken sind immer wieder verkeilen.

Hier ist eine weitere Frage:

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?

Und noch eines:

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?

ich wirklich interessiert bin zu wissen, wie diese Art von Daten ist in der Regel behandelt / näherte, mehr als spezifische Antworten auf die oben.

Nochmals danke.

War es hilfreich?

Lösung

  

Im Moment ist die System-I prüft bin mit, um zu sehen, ob die Daten für diese Woche bereits vorhanden sind, und wenn es ist, ziehen all diese Daten aus der DB, findet ein Skript, um die Unterschiede und sendet sie aus, und nach all dies, werden die Daten der alten Daten gelöscht und durch die neuen Daten ersetzt.

So Ihr Skript kennt die Unterschiede, nicht wahr? Und Sie wollen nicht ein paar extra extra Werkzeuge verwenden, abgesehen von Ihrem Skript und MySQL, nicht wahr?

Ich bin ziemlich überzeugt, dass MySQL für sich jedes ‚diff‘ Werkzeug nicht bieten, so dass das Beste, was Sie erreichen können, ist neue CSV-Datei für Updates nur. Ich meine - es sollte nur geändert Zeilen enthalten. Aktualisierung wäre schneller, und alle geänderten Daten wären leicht verfügbar.

Andere Tipps

Wenn Sie einen eindeutigen Schlüssel auf einem der Felder haben, können Sie verwenden:

LOAD DATA LOCAL INFILE '/path/to/data.csv' REPLACE INTO TABLE table_name
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top