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,data1
    2,data2
    3,data3
    4,data4
    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
    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.

  • 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
    CREATE TEMPORARY TABLE fre2 like fre;
    
    LOAD DATA INFILE '/home/deutsch/public_html/fre.csv'
    
    into TABLE fre2
    
    FIELDS TERMINATED BY ';'
    
    (id, der, dede, dsds, ddddd);


    Die CSV-Datei liegt bereits auf dem Server.

  • Genau, Du musst nur die Tabelle anlegen, d. h. entweder mit deinem SQL:

    Code
    CREATE TEMPORARY TABLE fre2 like fre;

    oder ebenfalls mit phpmyadmin, dann die Daten einlesen und dann übertragen mit dem letzten Teil ab update.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!