CSV Import in MySQL

gulo92

Mitglied
Hi,

ich habe eine Funktion á la
PHP:
LOAD DATA LOCAL
        INFILE '/home/www/servers/www.servername.de/tmp/import.csv'
        REPLACE
        INTO TABLE tabellenname
        FIELDS
                TERMINATED BY ';'
                OPTIONALLY ENCLOSED BY '"';

um CSV-Daten in meine MySQL Datenbank zu importieren. Wie kann ich es schaffen, dass nur bestimmte Spalten eingesetzt werden. Heißt: Ich habe eine Tabelle mit Werten schon gefüllt und möchte nun zu den bestehenden Daten die per ID als Primärschlüssen durchnummeriert sind eine neue Spalte mit Werten füllen. Also ich habe eine Tabelle mit 'id' und 'name', welche ich bereits gefüllt habe mit Werten. Nun füge ich eine neue Spalte 'nachname' ein mit der ich die bestehenden Werte ergänzen möchte. An den Spalten 'id' und 'name' soll sich nichts ändern, aber die die neuen Daten sollen aus der CSV Datei in die neue Spalte importiert werden.

Bin am Verzweifeln .. Danke für eure Hilfe.
 
Wenn ich das richtig verstehe, musst du die Werte die du nicht einfügen möchtest als @dummy deklarieren. Sommit werden diese Spalten in der CSV-Datei ignoriert.
Siehe Quellcode.

PHP:
$sql = "LOAD DATA LOCAL INFILE '{$csv_datei}'
        INTO TABLE `{$tabelle}`
        FIELDS TERMINATED BY ';'
        OPTIONALLY ENCLOSED BY '\"'
        LINES TERMINATED BY '\n'
        IGNORE 1 LINES //ignoriert die erste Zeile der CSV-Datei
        ( @dummy, @dummy, kunde, mitarbeiter, taetigkeit, @startdatum, startzeit, @endedatum, endezeit, dauer, stundensatz, @umsatz, notizen, @dummy)

        SET startdatum = STR_TO_DATE(@startdatum, GET_FORMAT(DATE,'EUR')),
            endedatum = STR_TO_DATE(@endedatum, GET_FORMAT(DATE,'EUR')),
            umsatz = REPLACE(@umsatz, ',', '.')";
 
Ich denke nicht da er die Spalten völlig ignoriert. Bin mir aber nicht sicher.

Am besten mal ausprobieren, bin auch kein Fachmann.
 
Ich denke du kommst nicht umhin die Daten zuerst in eine Stage-Tabelle zu laden und dann die Originaldaten mittels UPDATE um diese Informationen zu erweitern.
 
Wasn eine Stage Tabelle? Letztlich will ich ja nur updaten, aber es überschreibt mir immer die alten Daten ...
 
'Wasn' das für eine Sprache? 'Was ist den', wenn ich bitten darf - ansonsten fange ich auch mit Dialekt an.

Zum Thema.
LOAD DATA ist IMMER ein INSERT. Nie ein Update.

Eine Stage-Tabelle? Eine einfache Tabelle. In diese setzt du dein LOAD DATA ab. Wenn die Daten da drin sind, kannst du mit einem UPDATE deine Haubttabelle anpassen
 
Sorry Sorry ;-)

gibt es also noch eine Funktion in MySQL die anstatt LOAD DATA LOCAL einfach nur updatet? Hast du irgendwie einen Link, der mir zeigt, wie ich meine Tabelle updaten kann?

Danke!
 

Neue Beiträge

Zurück