Joopi
[MySQL] Upload csv-Datei - Druckversion

+- Joopi (https://forum.hermann-splitthoff.de)
+-- Forum: Wissenswertes (https://forum.hermann-splitthoff.de/forumdisplay.php?fid=1)
+--- Forum: Programmieren (https://forum.hermann-splitthoff.de/forumdisplay.php?fid=6)
+--- Thema: [MySQL] Upload csv-Datei (/showthread.php?tid=262)



Upload csv-Datei - Joopi - 12-07-2023

Das Einfügen von Daten in eine MySQL-Tabelle mittels einer csv-Datei ist im Grunde genommen recht einfach. Es gibt aber Tücken, die man wissen und überlisten muss.

Der INSERT-Befehl erfordert immer die gleiche Anzahl einzufügender Spalten wie Spalten in der Tabelle vorhanden sind. Wird über ein Formular oder über eine sql-Downloaddatei eine Tabelle gefüllt, ist gewährleistet, dass die üblicherweise vorhandene Spalte mit dem auto_increment automatisch gefüllt wird. In der Regel handelt es sich um die Spalte id oder ähnliches.

Oftmals liegen Textdateien vor, die zumindest im csv-Format erstellt wurden und somit relativ einfach weiterverarbeitet werden könnten. Gäbe es da nicht das Hindernis, dass oftmals in dieser Art von Erfassungsgrundlage genau diese wichtige Spalte mit dem Namen id oder ähnliches fehlt. Naja, mir geht es leider oftmals so.

Bisher habe ich die csv-Datei in Excel bzw. LibreOffice Calc geladen, eine Spalte vor den Daten eingefügt, diese dann mit Autofill durchnummeriert und dann wieder als csv-Datei abgespeichert. Ein wenig umständlich, aber zielführend (meistens).

Heute habe ich gelernt, dass es auch anders geht. Die gelernte Variante spart Zeit und findet ausschließlich in PHPMyAdmin statt. Will man über PHPMyAdmin eine csv-Datei importieren, erkennt das Programm den Dateityp. Es wird danach gefragt, wie die Spalten getrennt und die Werte eingeschlossen sind.

Würde ich einfach nur auf importieren klicken, würde eine Fehlermeldung erscheinen. Diese Fehlermeldung würde berichten, dass die Anzahl der Spalten zwischen einzufügenden Werten und Tabelle nicht übereinstimme. Das wäre auch richtig so, denn die Spalte mit dem Namen id oder ähnliches fehlt in der csv-Datei.

Die Lösung ist, dass in dem Feld Spaltennamen genau die Spalten eingetragen werden, die in der csv-Datei enthalten sind (die Überschriften stehen nicht drin). Die Reihenfolge der Spalten sollte aber trotzdem stimmen und gewährleistet sein.

Das würde dann so aussehen können:

   

Wenn dann, Datenkonsistenz vorausgesetzt, auf importieren bzw. ok geklickt wird, werden die Daten eingelesen und die Spalte mit auto_increment automatisch gefüllt.

Diese Art des Uploads ist mir wesentlich lieber, wie das Herumgehampele in einem Tabellenkalkulationsprogramm oder eine andere Art der Programmierung, die eine fortlaufende Nummer vor den jeweiligen Datensatz stellt.

Wenn es nicht zu viele Datensätze sind, dann kann man die laufende Nummer händisch eingeben. Meine csv-Datei hatte über 230.000 Datensätze. Das ist mir dann doch ein wenig über den Kopf gewachsen.