MySql: Update mit csv-Datei
JimBob
- datenbank
Guten Tag,
ich habe eine Tabelle "table1" mit den Feldern
"table1ID", "table1Deutsch"", "table1Englisch", "table1Französisch",
"table1FeldX", "table1FeldY", "table1FeldZ" und weitere
Es soll eine csv_Datei hochgeladen werden, die die Tabelle "table1"
updated.
Die csv-Datei enthält aber nur Werte für die Felder "table1Englisch", "table1Französisch" und natürlich die zugehörige "table1ID".
Wie kann ich das am besten lösen?
Mein Ansatz ist, die csv-Datei in eine temporäre Tabelle "tempTable" zu schreiben,
dann daraus durch auslesen einen Update-Befehl auf die Tabelle "table1" zu stricken.
Mir wäre es aber lieber einen sql-Befehl zu haben, vom Aufbau ungefähr so:
'UPDATE "table1" SET "table1Englisch", "table1Französisch" SELECT FROM "tempTable"'
Die Syntax ist natürlich nicht korrekt, aber ich hoffe Ihr wisst, was ich meine.
Danke für Eure Hlfe,
JimBob
hi,
Es soll eine csv_Datei hochgeladen werden, die die Tabelle "table1"
updated.
Die csv-Datei enthält aber nur Werte für die Felder "table1Englisch", "table1Französisch" und natürlich die zugehörige "table1ID".
schau dir im manual die syntax von LOAD DADA INFILE mal an.
gruß,
wahsaga
Hallo
schau dir im manual die syntax von LOAD DADA INFILE mal an.
Habe ich, aber ich steige da nicht so richtig hinter.
Gruss,
JimBob
hi,
Habe ich, aber ich steige da nicht so richtig hinter.
dann such dir ein einfacheres hobby.
gruß,
wahsaga
(alternativ könntest du es natürlich auch mal mit einer _wirklichen_ problembeschreibung versuchen. aber reine "kannichnich!!!1"-jammerposting bringen exakt gar nichts.)
Ich habe nicht gejammert, sondern nur nach einer Hilfe gesucht.
Mehr nicht. Wenn mein Problem zu trivial für Dich ist, dann lass es doch einfach sein, darauf zu antworten.
Schönen Tag noch,
Jim Bob
hi,
Ich habe nicht gejammert, sondern nur nach einer Hilfe gesucht.
ein schlichtes "ich steige nicht dahinter" ohne jegliche weitere ausführungen, _wo genau_ das verständnisproblem liegt, ist in meinen augen gejammer.
Wenn mein Problem zu trivial für Dich ist, dann lass es doch einfach sein, darauf zu antworten.
wenn du dein problem hier gelöst haben willst, dann beschäftige dich doch vielleicht erst mal mit http://www.lugbz.org/documents/smart-questions_de.html. könnte durchaus hilfreich sein.
gruß,
wahsaga
Hi,
also ich habe mich unter mysql.de ausgiebig mit der "load data infile"
beschäftigt, habe da aber nirgendwo eine lösung für mein problem sehen können.
Die datei.csv enthält die Werte für table1Deutsch
, table1Französisch
und eine ID - die ID ist auch in table1
enthalten.
Ich denke mit einem LOAD DATA INFILE 'datei.csv' REPLACE
INTO TABLE table1
(table1Deutsch
, table1Französisch
))
ist es nicht getan, da dann Datensätze nicht geupdatet werden, sondern komplett überschrieben.
Die Tabelle table1
enthält aber mehr Felder als die datei.csv.
Ist das jetzt etwas verdtändlicher?
Gruss,
JimBob
hi,
Ich denke mit einem LOAD DATA INFILE 'datei.csv' REPLACE
INTO TABLEtable1
(table1Deutsch
,table1Französisch
))ist es nicht getan, da dann Datensätze nicht geupdatet werden, sondern komplett überschrieben.
da hast du die schlüsselwörter REPLACE / IGNORE aber sträflich vernachlässigt beim lesen :-)
gruß,
wahsaga
da hast du die schlüsselwörter REPLACE / IGNORE aber sträflich vernachlässigt beim lesen :-)
Nein, habe ich nicht. IGNORE bezieht sich doch auf LINES (so wie ich es verstanden habe): IGNORE 1 LINE.
REPLACE ersetzt existierende Datensätze komplett.
Ich sehe da (noch nicht) den Zusammenhang mit meinem Problem.
Gruss,
JimBob
hi,
Nein, habe ich nicht. IGNORE bezieht sich doch auf LINES (so wie ich es verstanden habe): IGNORE 1 LINE.
nein, ich meinte das andere IGNORE.
REPLACE ersetzt existierende Datensätze komplett.
hm, das weiß ich im moment auch nicht so sicher.
Die REPLACE- und IGNORE-Schlüsselwörter steuern die Handhabung von Eingabe-Datensätzen, die bestehende Datensätze auf eindeutigen Schlüsselwerten duplizieren. Wenn Sie REPLACE angeben, ersetzen neue Zeilen bestehende Zeilen, die denselben eindeutigen Schlüsselwert besitzen. Wenn Sie IGNORE angeben, werden Eingabe-Zeilen, die eine bestehende Zeile auf einem Schlüsselwert duplizieren, übersprungen.
wenn du nur werte für bestimmte spalten angegeben hast, würde ich eigentlich unter angabe der option REPLACE erwarten, dass nur diese in einem bestehendem datensatz mit gleichem schlüssel überschrieben werden, die nicht angegebenen spalten sollten m.E. unberührt bleiben.
da hilft im zweifel nur ausprobieren ... kannst ja mal eine kopie der tabelle ziehen, und schauen, wie es sich verhält.
gruß,
wahsaga
Hallo,
also ich habe es jetzt so gelöst:
1. csv-Datei hochgeladen und in temporäre Tabelle '' gespeichert.
2. folgenden sql-Befehl ausgeführt:
$sql = "UPDATE table1
LEFT JOIN tempTable
ON(table1
.table1Id
= tempTable
.tempTableId
) SET table1
.table1Englisch
= tempTable
.Englisch
, table1
.table1Französisch
= tempTable
.Französisch WHERE(
table1.
table1Id=
tempTable.
tempTableId`)";
Das funzt wunderbar.
Danke nochmal.
JimBob