csv-Datei filtern

coastbike

Grünschnabel
Bisher hatte ich ein PHP-Script, mit dem ich eine csv-Datei in meine Datenbank (imDB) im Internet einlesen konnte. Diese csv-Datei war ein Export aus einer anderen Datenbank (exDB) auf der Festplatte. Bisher war auch jeder Datensatz in der csv-Datei nur einmal vorhanden. Durch Umstellung der exDB hab ich jetzt manche Datensätze mehrfach. Das kann ich beim Export auch nicht beeinflussen.

Meine Frage: Wie kann ich die csv-Datei filtern, sodass ich mehrfach-Datensätze nur einmal in die imDB schreibe? Kann ich die csv-Datei in ein Array einlesen und darin filtern? Wenn ja, dann wie? Oder kann ich die csv-Datei als Tabelle behandeln und mit SELECT ansprechen?

Im Forum habe ich noch nichts gefunden dazu. Oder mein Ansatz war falsch.

Wer kann helfen?
 
Ein einfacher weg währe in der Datenbank durch setzen von UNIQ- bzw primärschlüsseln doppelte daten zu verhindern. Und dann beim Import die doppelten einfach übergehen lassen.
 
Als Tabelle kannst du die csv Datei nicht behandeln.
Du könntest wie gesagt entsprechend unique constraints auf die Tabelle setzen in die die Daten geschrieben werden. Ich halte es jedoch nicht für sinnvoll, wenn du die Tabelle jetzt so umbaust, dass man gut Daten importieren kann. Ist ja bestimmt nicht einzige Sinn dieser Tabelle oder?

Ich habe das Szenario zwar nicht ganz verstanden, aber ich nehme an du hast lokal ne Datenbank, die lässt du nach csv exportieren, lädst die Datei auf den Server, der importiert sie.
Ich würde dir das Datenintegrationstool kettle (kettle.pentaho.org) empfehlen. Dort kannst du mit einem Editor Transformationen zusammenklicken, die dann anschließend durch eine Engine ausgeführt werden. Du könntest es dir auf deinen Rechner laden und eine Transformation modellieren die die csv einließt, doppelte Einträge rausfiltert und in einer neuen csv abspeichert. In dieser Datei sind dann keine dupletten mehr vorhanden. Anschließend kannst du dann mit dieser csv weiterarbeiten.
 
Danke für die beiden schnellen Antworten von Michael Engel und Cojote.

Cojote, du hast es richtig erkannt. Ich habe ein Programm, aus dessen Datenbank exportiere ich Daten in eine csv-Datei um sie dann ins Internet zu laden. Leider wurde die Struktur der Datenbank komplett verändert. Wenn früher alle Eigenschaften zu einem Objekt nebeneinander in der Tabelle standen, werden jetzt die Eigenschaften einzeln gelistet und einem Objekt zugeordnet. Der Vorteil liegt vielleicht in den nicht entstehenden Leerfeldern, die ja auch Speicher sind. Lag und liegt nicht in meinem Einflussbereich.

Eigentlich suche ich nur nach einer einfachen Lösung.

Idee:

1. csv-Datei in ein Array einlesen
2. Array nach Objekten sortieren (array_multisort)
3. Über eine Schleife sich wiederholende Objekte ausschließen

Komm ich damit durch oder gibt es noch was kürzeres?
 
Zurück