Daten aus csv-Datei in zwei Tabellen speichern
Hallo,
ich habe folgende Problemstellung, zu der ich einen guten Rat bräuchte: Ich habe zwei Tabellen, wobei in Tabelle 1 Daten über Bücher abgelegt sind (Autor, Titel, usw., insgesamt 13 Felder inkl. ID) und die Tabelle 2 dazu dient, diese Bücher bestimmten Kategorien zuzuordnen. Tabelle 2 hat nur zwei Felder, eins mit dem Buch-ID und eins mit der Kategorienummer. Die zweite Tabelle gibt es, damit man ein Buch auch eventeuell mehreren Kategorien zuordnen kann. Nun sollen Daten aus einer csv-Datei via php (nicht phpmyadmin) importiert werden. Die csv-Datei wird von einem Nutzer mit Hilfe von Excel oder OpenOffice generiert. Am besten wäre es, wenn der Nutzer nur EINE Tabelle bearbeiten bräuchte (bzw. soll er eine Vorlage benutzten), in der die Kategorienummer einfach als zusätzliches Feld eingetragen ist. Das Hochladen und der Datenimport in Tabelle 1 ohne die Kategorie klappt soweit. Nach dem Hochladen mache ich den Import zur Zeit so, wobei ich vorher noch die ersten beiden Zeilen der Datei lösche, die die Überschriften und eine Beispielzeile enthält (ich vermute, dass man das auch eleganter machen kann, aber es funktioniert): PHP-Code:
Ich habe irgendwo gelesen, dass man die Daten einer csv-Datei zeilenweise auslesen lassen und sie dann in einem Array speichern kann (wobei ich nicht weiss, wie man das macht), dann folgt der Import. Könnte man im Zuge einer solchen Vorgehensweise die Daten aus der csv-Datei auch trennen und zwei verschiedene Arrays erstellen, die dann jeweils in Tabelle 1 und 2 eingelesen werden? Falls ja, wie macht man das? Oder gibt es noch eine einfachere Lösung für das Problem? Wäre dankbar für Tips! Beste Grüße Sputnik |
AW: Daten aus csv-Datei in zwei Tabellen speichern
Du kannst die csv-Datei mit der Funktion fgetcsv() Zeilenweise auslesen und die Spalten als Array erhalten.
Ansonsten Zeilen mit der Funktion fgets() auslesen und mit explode() die Spalten trennen. Oder mit file() die ganze Datei einlesen und die Zeilen (Array!) mit explode() in eine zweite Array-Dimension oder ein Hilfsarray trennen. Danach läuft eine Schleife durch das Array, die prüft ob das Buch der jeweiligen Zeile schon in der Tabelle 1 ist. - Ja: UPDATE ... // oder auch kein Update, wie du willst - Nein: INSERT ... Weiter nimmt diese Schleife die Buch-ID (Bei einem Update "weißt" du die Buch-ID, bei einem Insert bekommst du sie über die Funktion mysql_insert_id(); ) und schreibt sie in die zweite Tabelle, zusammen mit der Kategorie Info aus deiner csv-Datei. Die ersten beiden Zeilen kannst du bei dieser Art der Auswertung einfach überspringen, dafür muß nix in der Datei gelöscht werden. |
AW: Daten aus csv-Datei in zwei Tabellen speichern
Hallo,
vielen Dank für die Lösungsansätze, das hilft mir erstmal weiter! Könnte ich Dich gegebenfalls später nochmal mit Nachfragen behelligen? Gruß Sputnik |
AW: Daten aus csv-Datei in zwei Tabellen speichern
Zitat:
Sonst antwortet aber bestimmt auch jemand anders. |
AW: Daten aus csv-Datei in zwei Tabellen speichern
Hallo!
Zitat:
PHP-Code:
|
AW: Daten aus csv-Datei in zwei Tabellen speichern
Wenn du nicht weißt, was in den Zeilen steht, kannst du einen Zähler mitlaufen lassen. Sonst geht es auch mit einer Bedingung, die sich auf den Inhalt in Element [0,0] bzw. [1,0] bezieht.
Die Zählervariante, denn ich weiß nicht was drinsteht ;-) PHP-Code:
|
AW: Daten aus csv-Datei in zwei Tabellen speichern
Hallo Raketenmann,
ich habe es hinbekommen. Vielen Dank für die Anregungen und die Hilfe! Beste Grüße Sputnik |
Alle Zeitangaben in WEZ +2. Es ist jetzt 15:25:01 Uhr. |
Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.