Daten aus einer Textdatei in die MySql-Tabelle laden

  • Hallo.

    Ich habe eine Tabelle mit mehreren tausend Datensätzen. Nun muss eine weitere Spalte mit Daten gefüllt werden. Da ich dafür keine Zeit habe, muss ich diese Aufgabe jemand anderem überlassen, doch ich will ihm nicht die ganze Tabelle zur Verfügung stellen. Ist es möglich, die gewünschten Daten in eine Textdatei einzutragen und diese dann in die dafür vorgesehene Spalte der bereits bestehenden Tabelle zu laden? Wäre das über PHPmYadmin oder irgendwie möglich? In welchem Format müssen die Daten in die Datei eingetragen werden? Muss es eine Excel-Datei sein oder reicht dafür ein einfacher Texteditor? Nochmal: Ich will keine neue Tabelle in phpmyadmin hochladen, sondern nur die Felder einer Spalte der bereits vorhandenen Tabelle mit den Daten aus der Textdatei auf meinem Rechner füllen. Kennt ihr vielleicht ein paar Tricks, wie man das hinbekommt?

  • Diese Methode funktioniert bei mir irgendwie nicht. Vielleicht habe ich es nicht richtig verstanden, denn mein Englisch ist nicht ganz gut. Würdest du es mir bitte verdeutschen und etwas genauer erklären, wo ist das alles schreiben muss? Kann ich den Code direkt in PhpMyadmin ausführen oder muss ich dafür eine PHP-Datei anlegen? Muss ich die Textdatei mit den Daten zuerst auf den Server hochladen?

  • Ich habe es mal mit Testtabellen und -dateien durch gespielt und es hat problemlos funktioniert. Du brauchst die Datei mit den Daten nicht selber hochzuladen, sondern kannst die Import-Funktion von phpmyadmin verwenden, dann kannst Du sie auf deinem lokalen Dateisystem auswählen und sie wird automatisch hochgeladen und eingelesen.

    Du schreibst zwar: "Ich will keine neue Tabelle in phpmyadmin hochladen" aber wenn man den Angaben bei Stackoverflow folgt, musst Du das tun, und zwar zunächst die Daten in eine temporäre Tabelle laden, dann daraus die Daten in die Zieltabelle einfügen. Die temp. Tabelle kannst Du dann wieder löschen.

    Die einzelnen Schritte sehen so aus:

    1. Spalte in der Zieltabelle auswählen, die sich als ID eignet, d. h. über die man einen Datensatz eindeutig identifizieren kann.

    2. Temp. Tabelle erzeugen mit zwei Spalten: ID und Wert, der in die Zieltabelle eingefügt werden soll.

    3. Mit phpmyadmin die neue Spalte in der Zieltabelle hinzu fügen.

    4. Um sie leicht editieren und in phpmyadmin importieren zu können, die Datei mit den Daten am besten als CSV-Datei anlegen. Bei meinem Test sahen die Daten so aus:

    Code
    1. 1,data1
    2. 2,data2
    3. 3,data3
    4. 4,data4
    5. 5,data5

    5. Die temp. Tabelle in phpmyadmin auswählen und in der Werkzeugleiste oben auf "Importieren" klicken.

    Format CSV auswählen, in "Spalten getrennt mit" das Komma stehen lassen, "Spalten eingeschlossen mit:" und "Spalten escaped mit" leer machen.

    Dies ist der einfachste Fall. Wenn Deine Daten auch Kommas enthalten können, musst Du dies anpassen.

    6. Import mit "OK" starten.

    7. Wenn der Import erfolgreich war, die Daten mit SQL in die Zieltabelle eintragen:

    SQL
    1. UPDATE ZIELTABELLE D SET D.NEWCOL=(SELECT VALUE FROM TEMP WHERE ID=D.ID)

    Wenn Du überprüft hast, dass die Daten richtig übernommen wurden, kannst Du die temp. Tabelle wieder löschen.

  • Danke für deine Mühe, aber worauf bezieht sich das Pfad '/tmp/your_file.csv' bei LOAD DATA INFILE

    Ist das das Verzeichnis auf meinem Computer oder ist das das Verzeichnis auf dem Apache-Server?


    Außerdem können die Daten in meiner Tabelle nicht durch Kommas getrennt sein. Aufgrund der Struktur der Tabelle würde das bei mir nicht funktioneiren, denke ich, aber ich versuche es. Gibt es keine andere Methode?

  • Zitat

    worauf bezieht sich das Pfad '/tmp/your_file.csv' bei LOAD DATA INFILE

    Ist das das Verzeichnis auf meinem Computer oder ist das das Verzeichnis auf dem Apache-Server?

    Das ist die Datei auf dem Server. Aber bei dem Verfahren, das ich selber beschrieben habe, ist das gar nicht relevant, weil Du dann die Datei manuell mit dem Filemanager auswählst. Wie ich oben schrieb:

    Zitat

    kannst die Import-Funktion von phpmyadmin verwenden, dann kannst Du sie auf deinem lokalen Dateisystem auswählen und sie wird automatisch hochgeladen und eingelesen.

    Zitat

    Außerdem können die Daten in meiner Tabelle nicht durch Kommas getrennt sein.

    Du kannst jedes beliebige Zeichen als Trennzeichen verwenden, auch ; |` etc., Du musst dieses nur beim Export angeben. Wenn dieses Zeichen in deinem Text vorkommen sollte, kannst Du die Einträge in Hochkommas einschließen und das Trennzeichen ggf. escapen.

    Wenn Du damit nicht zum Ziel kommst, dann poste mal ein paar Beispieleinträge, die das Problem demonstrieren.

  • Ich habe es gerade mit einer Testtabelle versucht.

    Der Code scheint tatsächlich zu funktionieren, aber mit den Rechten stimmt etwas anscheinend nicht. Ich bekomme folgende Fehlermeldung:



    Dabei bin ich als Administrator angemeldet.

    Ich muss dann wohl den Diensteanbieter kontaktieren.


    Also der Code sieht so aus:


  • Aber wenn ich die Importfunktion verwende, kann ich den oben genannten Code nirgendwohin mehr schreiben. Muss der Code nicht in "SQL" stehen?


    Du meinst, ich muss dann den Teil "load data infile" aus dem Code entfernen?

  • Und wie würde dann der oben genannte Code aussehen?

    Entschuldigung, aber ich stehe hier völlig auf dem Schlauch. :(

    Wenn ich die CSV-Datei über die Importfunktion laden würde, dann wäre dieser Teil des Codes nicht mehr nötig:


    Code
    1. CREATE TEMPORARY TABLE fre2 like fre;
    2. LOAD DATA INFILE '/home/deutsch/public_html/fre.csv'
    3. into TABLE fre2
    4. FIELDS TERMINATED BY ';'
    5. (id, der, dede, dsds, ddddd);


    Die CSV-Datei liegt bereits auf dem Server.

  • Jetzt wurde es ohne Fehler durchgeführt, aber die Daten wurden nicht in die Spalte kopiert.



    Da habe ich anscheinend wieder was falsch gemacht.

    Ich experimentiere weiter und schreibe hier, wenn es geklappt hat.

    Vielen Dank für deine Mühe und deine Hilfsbereitschaft.

  • Die letzte Antwort auf dieses Thema liegt mehr als 365 Tage zurück. Das Thema ist womöglich bereits veraltet. Bitte erstelle ggf. ein neues Thema.

    • :)
    • :(
    • ;)
    • :P
    • ^^
    • :D
    • ;(
    • X(
    • :*
    • :|
    • 8o
    • =O
    • <X
    • ||
    • :/
    • :S
    • X/
    • 8)
    • ?(
    • :huh:
    • :rolleyes:
    • :love:
    • :pinch:
    • 8|
    • :cursing:
    • :wacko:
    • :thumbdown:
    • :thumbup:
    • :sleeping:
    • :whistling:
    • :evil:
    • :saint:
    • <3
    • :!:
    • :?:
    Maximale Anzahl an Dateianhängen: 10
    Maximale Dateigröße: 1 MB
    Erlaubte Dateiendungen: bmp, gif, jpeg, jpg, pdf, png, txt, zip