JimBob: MySql: Update mit csv-Datei

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

  1. 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

    --
    "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
    1. 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

      1. 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.)

        --
        "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
        1. 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

          1. 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

            --
            "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
            1. 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

              1. hi,

                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.

                da hast du die schlüsselwörter REPLACE / IGNORE aber sträflich vernachlässigt beim lesen :-)

                gruß,
                wahsaga

                --
                "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
                1. 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

                  1. 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

                    --
                    "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
                    1. 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