CSV und mein Mysql Problem.

volcem

Lieutenant
Registriert
Dez. 2007
Beiträge
1.021
Abend.

Ich steh vor einem Problem wo ich keinen Lösungsansatz sehe.

Ich hab ein Kunden Verwaltungssystem für eine Lackfabrik geschrieben, soweit geht auch alles, doch der Kunde möchte zusätzlich seine xls wo "neue" Kunden drin gespeichert werden per Update Funktion aktualisieren.

Ok, soweit kann ich es mir schon vorstellen:

Kunde wandelt die xls in eine csv mit Trennzeichen um, das weiß der Kunde auch schon und es ist kein Problem für ihn.

Also hab ich dann nun eine csv die erstmal auf dem Server muss, das kein Problem.

So nun zu dem wo ich keine Lösung sehe:

Update Funktion unbrauchbar...
INSERT Funktion unbrauchbar... ( Ältere Datensätze schon vorhanden )

Bleibt wohl nur noch die vielleicht brauchbare Funktion:
LOAD DATA
Doch wie kann ich per Script das so regeln das die "vorhandenen" Daten übersprungen werden und nur die "neuen" eingelesen und gespeichert werden?


PHP:
LOAD DATA INFILE '$file' REPLACE INTO TABLE ".$table." FIELDS TERMINATED BY '$getrennt_mit'";

?
 
meine idee wäre es eine extra tabelle zu erstellen, die du dann mit einem JOINT verknüpfen kannst.
ich weiß gerade leider nicht ob du beim LOAD DATA schon mit einem JOINT arbeiten kannst, was die extra tabelle dann hinfällig werden lässt.

edit: also mit nem joint kann man in mysql wirklich nichts anfangen, das stört nur die konzentration ^^ und dann korigiere ich micht wohl mal auf join :)
 
Zuletzt bearbeitet:
Leider finde ich in der Manuell nichts dazu :(

Ich werde das mal soweit fertig schreiben, bis ich an dem Punkt bin wo er die Daten in die db schreiben soll.

Mal sehen was passiert.
 
@Mika911: Also einen JOINT gibts in MySQL meines Wissens nach nicht :D

@volcem: Was spricht denn dagegen, die alten Daten zu überschreiben? Du könntest die Daten auch in eine neu erstellte Tabelle names "tmp" reinladen, die alte droppen und "tmp" dann umbenennen. Zusätzlich von dir gespeicherte Daten zu den Produkten speicherst du einfach in einer extra Tabelle die du mit JOIN (!) verbindest, Key ist dann halt dann die ProduktID oder so. Musst halt dann aufpassen, dass du die Konsistenz wahrst und z.B. nicht mehr vorhandene IDs in der zusätzlichen Tabelle löschst sowie neue dort anlegst nach dem Reinladen.
Alternativ kann mans auch z.B. über PHP schön machen mit http://de2.php.net/fgetcsv aber das ist weniger performant (macht aber wohl nur bei csv-Files mit ner Größe von 10 MB aufwärts wirklich nen Unterschied aber da hat Excel wohl auch seine Probleme schon ;) ). Je nachdem in welcher Programmiersprache dein "Kunden Verwaltungssystem" geschrieben wurde gibts auch dafür sicher CSV-Importlibraries.
 
Zuletzt bearbeitet:
Das Problem ist das der "kunde" per Web Kunden einträgt und zusätzlich wenn er unterwegs ist oder gerade kein Internet zur Verfügung hat seine neuen Kunden in sein Laptop eingibt.

Derzeit trägt er alle kunden später per Hand in die Datenbank, was natürlich suboptimal ist...

Die einfach mit der "neuen/alten" csv zu überschreiben ist schlecht!

Das System ist per PHP geschrieben.

Und in eine "extra" Tabelle schreiben und später in die original Tabelle einfügen ist nicht so der bringer.
 
Jo wenns sowieso in PHP ist dann lies doch einfach mit oben genanntem fgetcsv (da ist auch ein Beispiel auf der verlinkten Seite) die Datei aus und mach dann Inserts in die Datenbank. Dürfte sehr einfach zu bewerkstelligen sein.

Das bringt auch noch den Vorteil mit sich, dass du in PHP die Daten auf Korrektheit prüfen kannst (sofern das hier sinnvoll möglich ist) und auch in der Datenbank mitspeichern kannst wann ein Datensatz hinzugefügt wurde (und somit gegenüber dem Auftraggeber genau belegen kannst wenn was schiefgelaufen ist; dazu am Besten auch die CSV-Files aufheben).
 
Ich werde es einfach mal versuchen, ich hab noch nie mit csv + php gearbeitet :/

Ich werde mir mal den Artikel in ruhe durchlesen und was dazu basteln.
Mal sehen was dabei raus kommt.

@BerniG

Die csv wird dann in einen Ordner auf dem Server gespeichert.
Sobald eine neue "hochgeladen" wird, bekommt die ne fortlaufende Nummer.
1-2-3-4 etc .csv
So kann ich es bisschen überblicken!

Danke für die Vorschläge ich werde es mal probieren!
 
Zurück
Oben