Boardunity & Video Forum

Boardunity & Video Forum (https://boardunity.de/)
-   Programmierung und Datenbanken (https://boardunity.de/programmierung-datenbanken-f23.html)
-   -   Intelligenter DatenImport von CSV bzw. XML (https://boardunity.de/intelligenter-datenimport-csv-bzw-xml-t1320.html)

Nev 02.02.2004 11:03

Intelligenter DatenImport von CSV bzw. XML
 
Hi @ll

Ich habe wieder mal eine kleine Denkaufgabe:
Intelligenter DatenImport von CSV bzw. XML

Was ich drunter verstehe:
Der User hat einen Offline-Datenbestand und will diesen mit dem Online-Datenbestand abgleichen.
Er lädt es als Datei hinauf, wobei er die Art (XML/ CSV) angibt, da es 2 verschiedene Paar Schuhe sind ;-)

Das hab ich mir dazu überlegt:
Die erste Zeile der CSV wird ausgelesen.
Die Felder werden untereinander ausgegeben, daneben sind die Felder aus der DB jeweils in einer Select-Box
Das hat den Sinn das man die Felder Zuweisen kann, kann ja sein, das die Daten-Köpfe nicht gleich sind.

Nun erfolgt ein Zwischenschritt: Es wird überprüft ob kein DB-Feld doppelt vorkommt, ansonsten zurück an den Start.

Nun kommt das Hauptproblem -> der eigendliche Abgleich
Da ja bestehende Daten vorhanden sind, sollten diese auch weiter bestehn beleiben, aber Änderungen der Datensätze trotzdem vorgenommen werden.

Ich habe mir überlegt ob man das nicht mit Regeln bewerkstelligen könnte?
d.h.: Der User gibt an, wer von den 2 Datenbeständen stärker ist.

Aber trotzdem bleibt das Problem mit Änderungen in einem Datensatz bestehn.

* Wie erkenne ich einen bestehenden Datensatz?
* Wie könnte man die SQL-Anzahl minimieren.
* Genereller Ansatz

PS: Es geht da nicht nur um ein Paar Datensätze, sondern um so 5.000++
Es sind Personen Daten!

Für Ideen bzw Ansätze habe ich immer ein offenes Ohr.

Michael Przybyla 02.02.2004 15:48

Ich fasse nochmal zusammen.

1. Anwender arbeitet Offline und verändert bzw. fügt Datensätze hinzu.
2. Der _gesammte Datenbestand_, kann vom Anwender als XML oder CSV exportiert werden.

Wenn du es dir nun ganz einfach machen willst, sprich ohne einem Datensatz eine höhere Priorität zuzuweisen, dann kannst du folgendermassen vorgehen.

1. CSV/XML Datei parsen.
2. Daraus _einen Query_ generieren ->
INSERT INTO mytable (myvalue) VALUES ('a'), ('b')
anstelle von
INSERT INTO mytable (myvalue) VALUES ('a');
INSERT INTO mytable (myvalue) VALUES ('a')
3. Benutze (falls mysql 4.1.0 vorhanden)
INSERT INTO mytable (myvalue) VALUES ('a') ON DUPLICATE KEY UPDATE myvalue = myvalue;


Sollte das mit MySQL nicht zutreffen, dann melde dich einfach nochmal.

Wenn jetzt der Anwender Offline Daten löscht, dann musst du etwas weitergehen.

Ich gehe davon aus dass du Primary Keys benutzt.
1. Alle IDs der Online/Offline Datenbank in ein array laden.
2. Alle IDs von dem Online Array löschen, die auch im Offline Array vorhanden sind.
3. DELETE FROM mytable WHERE id IN(das_array_mit_den_ids);

Nev 02.02.2004 16:33

Hi CannabisCow

Danke für deine Ausführung.

Jo mit der MySql-Db hattest du recht.

Mein Problem ist, das ich in den Offline-Datenbestand keine Keys habe.

Das ganze wird kunden zur Verfügung gestellt d.h. die Daten kommen aus irgendwelchen Quellen daher.

Aber Ansatzt mit den mehreren Inserts mittels 1 Query is ned schlecht.

Danke vorerst mal.

Michael Przybyla 02.02.2004 17:41

Zitat:

Zitat von Nev
Mein Problem ist, das ich in den Offline-Datenbestand keine Keys habe.

Das ganze wird kunden zur Verfügung gestellt d.h. die Daten kommen aus irgendwelchen Quellen daher.

Verstehe ich nicht so ganz.
Könntest du das erläutern?

Nev 02.02.2004 17:47

Hi @gain

das ist ein B2B (Business to Business) Tool.
d.h. Firmen kaufen bei uns dieses Tool um Ihre Kunden zu verwalten.

Über die Eigenheiten des Projekt kann ich leider ned mehr sagen (*verboten*)

In dem Tool sind schon Datenbestände, nun können die Kunden weitere hinzufügen bzw. abgleichen.
Da aus verschiedensten System bzw. verschiedenste Leute die Daten zurverfügung stellen, kann es vorkommen, das Key vorhanden da sind, oder auch ned.

Ich hoffe ich habe es erklären können.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:36 Uhr.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25