Question

J'ai lu les solutions à des problèmes similaires, mais elles semblent toutes impliquer des scripts et des outils supplémentaires. J'espère que mon problème sera assez simple pour éviter cela.

L’utilisateur télécharge donc un csv des données de la semaine prochaine. Il est inséré dans la base de données, pas de problème.

MAIS

une heure plus tard, il reçoit les commentaires de tous et doit faire les mises à jour en conséquence. Il met à jour le csv et va le télécharger dans la base de données.

À l'heure actuelle, le système que j'utilise vérifie si les données de cette semaine sont déjà présentes. Si c'est le cas, toutes les données de la base de données sont extraites, un script trouve les différences et les envoie, et Après tout cela, les anciennes données sont supprimées et remplacées par les nouvelles.

Évidemment, il est beaucoup plus facile de tout effacer et de ressaisir les données, mais ce n’est pas la meilleure méthode, surtout s’il ya beaucoup de changements ou des tonnes de données. Mais je dois savoir QUELS changements ont été apportés pour envoyer des alertes. Mais je ne veux pas de journal des transactions, car les alertes ne doivent être envoyées qu'une seule fois et après cela, les anciennes données sont inutiles.

Alors!

Existe-t-il un moyen intelligent de comparer les nouvelles données aux données existantes, d’obtenir uniquement les lignes modifiées / supprimées / ajoutées et d’apporter ces modifications? À l’heure actuelle, il semble que je pourrais faire une mise à jour, mais je n’obtiendrai aucune réponse à ce qui a changé…

Merci!

Modification rapide:

Aucune clé étrangère n'est actuellement utilisée. Cela va bientôt changer, mais cela ne devrait pas faire de différence, car les clés étrangères indiqueront uniquement le destinataire des données et n'auront donc pas besoin d'être modifiées. En ce qui concerne les clés primaires, cela pose un peu le dilemme suivant:

Les données en question correspondent à l'horaire de travail de chacun. Donc, il serait bien (pour des applications spécifiques de cette planification au-delà d'une simple sortie) que chaque équipe ait une clé. Mais le problème est, disons que l'utilisateur1 était en retard lundi. Le retard est enregistré dans un tableau séparé et est lié au décalage à l’aide de la touche Maj. Mais si mardi il est nécessaire d’apporter des modifications à la semaine déjà en cours, je crains qu’il ne devienne trop difficile d’assurer que toutes les entrées dans la base de données ayant déjà eu lieu (et pouvant donc avoir des associations être cassé) sera recréé dans le processus. Malheureusement, ce n’est pas aussi simple que de simplement mettre à jour tous les événements survenant APRÈS l’heure actuelle, car cela ajouterait du travail (et le rendrait donc moins commercialisable) aux personnes qui effectuent le téléchargement. Fondamentalement, ils planifient le programme sur un programme, l'exportent vers un fichier CSV, puis le téléchargent sur une page Web pour toutes les applications Web qui ont besoin de ces données. Il est donc tout simplement beaucoup plus facile pour eux (et moins stressant pour toutes les personnes concernées) de suivre le même programme à chaque exportation de la semaine entière et de son téléchargement.

Mon principal souci est donc de rendre le script de téléchargement aussi intelligent que possible aux deux extrémités. Il ne faut pas avoir trop à faire pour essayer de trouver les changements, il peut les trouver, peu importe l’entrée ET Aucune des données non modifiées ne risque de subir une nouvelle saisie.

Voici une question connexe:

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?

Et un autre:

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?

Je voudrais vraiment savoir comment ce type de données est généralement traité / traité, plus que des réponses spécifiques à ce qui précède.

Encore merci.

Était-ce utile?

La solution

  

À l'heure actuelle, le système que j'utilise vérifie si les données de cette semaine sont déjà présentes. Si c'est le cas, toutes les données de la base de données sont extraites, un script trouve les différences et les envoie, et Après tout cela, les anciennes données sont supprimées et remplacées par les nouvelles.

Votre script connaît donc les différences, non? Et vous ne voulez pas utiliser d’outils supplémentaires, hormis votre script et MySQL, non?

Je suis tout à fait convaincu que MySQL ne propose aucun outil "diff" en tant que tel. Par conséquent, le mieux que vous puissiez faire est de créer un nouveau fichier CSV pour les mises à jour uniquement. Je veux dire - il ne devrait contenir que des lignes modifiées. La mise à jour serait plus rapide et toutes les données modifiées seraient facilement disponibles.

Autres conseils

Si vous avez une clé unique sur l'un des champs, vous pouvez utiliser:

LOAD DATA LOCAL INFILE '/path/to/data.csv' REPLACE INTO TABLE table_name
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top