LOAD DATA in zwei Tabellen
lixx
- datenbank
0 lixx
Hallo!
Kann mir jemand einen Tipp geben wie ich eine CSV-Datei mit LOAD DATA in zwei Tabellen laden kann?
Der Sinn darin ist, ich möchte Adressen per CSV-Datei importieren. In der Eingabemaske kann man die Felder zuordnen, Zeilen überspringen ... und alle Adressen gleich einer Gruppe zuweisen. Die Verknüpfung zu den Gruppen erfolgt durch die m:n-Tabelle Adressen_Gruppen.
Weitere Detail (kann man sich auch sparen): Zuerst wird die hochgeladene Datei eingelesen und zu einer neuen CSV-Datei, nach den zuvor gemachten Einstellungen, zusammengestellt. Hier werden auch gleich ein paar Prüfungen vorgenommen. Die neu erstellte Datei soll dann per LOAD DATA eingelesen werden.
Angenommen ich habe folgende CSV-Datei:
Vorname;Nachname;Gruppe
Douglas;Adams;1,2,3,4
Jasper;Fforde;2,3
Wie bekomme ich die Gruppenzuteilung in die Adressen_Gruppen-Tabelle? (Die Gruppen-Spalte kann auch anderst formatiert sein)
Vielleicht geht es ja mit einer Variable, aber weiter bin ich dabei nicht gekommen.
LOAD DATA LOCAL
INFILE 'data.csv'
INTO TABLE Adressen, Adressen_Gruppen
FIELDS
TERMINATED BY ';'
ENCLOSED BY ''
LINES TERMINATED BY '\n'
( Adressen.Vorname, Adressen.Nachname, @Gruppen_id )
SET Adressen_Gruppen.Adressen_id = @Gruppen_id ... ??? ;
Ein kleiner Denkanstoß wäre schon fein.
lg lixx
Mir ist da eine Lösung eingefallen und wollte wissen was ihr davon haltet.
Das Problem beim Einfügen ist ja die ID der eingefügten Datensätze herauszufinden. Nun folgender Plan:
1. Beide Tabellen zum Schreiben sperren.
2. Den aktuellen Autoincrement-Wert von Adressen herausfinden
3. Die csv-Datei Adressen erstellen. Autoincrement-Wert vom aktuellen Wert pro Zeile erhöhen.
4. Die csv-Datei für Adressen_Gruppen erstellen. Ebenfalls Autoincrement-Wert vom aktuellen Wert pro Zeile erhöhen.
5. Beide Dateien mir LOAD DATA einlesen.
6. Tabellen wieder freigeben.
Ich denke mir, dass durch die Zeitbeschränkung nicht all zu viel an Performance eingebüßt wird. Und ich gehe davon aus, dass man nicht jeden Tag Datensätze importieren möchte.