Mehrere "Tabellen" aus einer CSV Datei lesen

Wie angekündigt, habe ich jetzt noch das Problem mit den n-m-Relationen gelöst. Außerdem habe ich es noch alles kommentiert und noch weiter ausgebessert. Hätte nicht gedacht, dass es zu so einem vollständigen Projekt werden würde.
PHP:
$join = $tables[ 'Benutzer' ]
  ->inner_join( $tables[ 'Zuweisung Benutzer-Endgerät' ], [ 'Benutzer-ID' ] )
  ->inner_join( $tables[ 'Endgerät' ],                    [ 'Endgerät-ID' ] )
  ->inner_join( $tables[ 'Systemendgerätedateien' ],      [ 'Endgerät-ID' ] );

#
# aufpassen:
#
#  alt                | neu
# ––––––––––––––––––––+––––––––––––––
#  ->get_rows()       | ->rows
#  ->set_rows( ... )  | ->rows = ...
#  ->get_columns()    | ->columns
#  ->get_table_name() | ->table_name
#  ->get_table_id()   | ->table_id
#
print_r( $join->rows );

Nachtrag: Und noch eine Aktualisierung: die Tabellen werden jetzt in einem entsprechendem Database-Objekt gesammelt, womit das Ganze jetzt so aussieht:
PHP:
$database = Database::parse( /* ... */ );

$join = $database[ 'Benutzer' ]
  ->inner_join( $database[ 'Zuweisung Benutzer-Endgerät' ], [ 'Benutzer-ID' ] )
  ->inner_join( $database[ 'Endgerät' ],                    [ 'Endgerät-ID' ] )
  ->inner_join( $database[ 'Systemendgerätedateien' ],      [ 'Endgerät-ID' ] );
Außerdem habe ich alle Klassen jetzt in einzelne Dateien unterteilt. Allerdings muss man nur die database.php einbinden, welche alle anderen Dateien nachlädt.
 

Anhänge

  • multi-table-csv-4.zip
    2,7 KB · Aufrufe: 7
  • multi-table-csv-5.zip
    4,7 KB · Aufrufe: 5
Zuletzt bearbeitet:
:eek: Was alles so aus meinem Anliegen wurde :D

Genial! :) Ich werde es morgen mal testen :)

Fehlt ja bloß noch eine Funktion um ganze Spalten aus den Tabellen zu löschen :p ;)

Aber echt großen Respekt für die Arbeit!!!!:)
 
Zuletzt bearbeitet:
Es gibt Sachen, die sollte man von mir nicht einfordern:
PHP:
# Spalten "Nummer" und "Name" von der Tabelle "Benutzer" auswählen (entfernt Spalte "Benutzer-ID")
$join = $tables['Benutzer']->select(['Nummer', 'Name']);
# Tabellenstruktur generieren
echo $join->generate();
 

Anhänge

  • multi-table-csv-6.zip
    5,9 KB · Aufrufe: 9
Verrückter Vogel :D das war doch nur Spass :D Aber trotzdem cool :)

Wie ist denn nun die Einbindung der CSV-Datei?
Gebe ich bei "$database = Database::parse( /* ... */ );" wieder nur die CSV-Datei an? Da kriege ich zur Zeit noch folgende Fehlermeldung:
Fatal error: Uncaught exception 'ParseError' with message 'Parse Error: unexpected table body' in /csv_parser/include/libs/csvparser/database.php:89 Stack trace: #0 /csv_parser/table.php(7): Database::parse('input/testdaten...') #1 {main} thrown in/csv_parser/include/libs/csvparser/database.php on line 89
 
Also es hat sich da nicht viel geändert, sondern Du musst da weiterhin mit file_get_contents() die Daten aus der Datei laden. Den Fehler kann ich jedoch mit den Daten bei mir nicht reproduzieren. Vielleicht kannst Du mal den Datensatz zeigen, den Du dafür benutzt hast.
 
Ich habe bisher gar nicht file_get_contents() benutzt o_O und es hat funktioniert...
Aber da lag der Fehler in diesem Fall :D

Nun kriege ich aber die Fehlermeldung
Fatal error: Class 'Table' not found in /csv_parser/include/libs/csvparser/database.php on line 68

Was für mich aber keinen Sinn macht, da du ja in Zeile 2 die table.php einbindest und ich habe deine Dateien alle in einem Ordner liegen.
 
Da kann ich Dir allerdings auch nicht weiterhelfen, da eben genau das der Fall ist und es bei mir problemlos läuft.
 
Irgendeine spezielle PHP Version die ich nutzen soll? zur Zeit nutze ich 5.4.40

Habe den Fehler mit der fehlende Klasse nun gelöst indem ich einfach alle Dateien der Reihe einbinde über eine Zentrale Datei mit folgendem Inhalt: (Habe die Dateien anhand ihrer Klassennamen benannt net wundern ;) )
PHP:
require_once 'ParseError.php';
require_once 'JoinError.php';
require_once 'Joinable.php';
require_once 'Table.php';
require_once 'Join.php';
require_once 'Database.php';

Jetzt kriege ich allerdings folgende Fehlermeldung:
Catchable fatal error: Argument 1 passed to Joinable::inner_join() must be an instance of Joinable, null given, called in /csv_parser/test.php on line 11 and defined in /csv_parser/include/class/Joinable.php on line 424

Die Datei test.php hat folgenden Inhalt:
PHP:
<?php
    error_reporting(E_ALL);

    include "include/include.inc.php";
    
    $dateizeiger = file_get_contents('input/test.csv');
    $database = Database::parse($dateizeiger);
    $join = $database[ 'Benutzer' ]
        ->inner_join( $database[ 'Zuweisung Benutzer-Endgerät' ], [ 'Benutzer-ID' ] )
        ->inner_join( $database[ 'Endgerät' ],                    [ 'Endgerät-ID' ] )
        ->inner_join( $database[ 'Systemendgerätedateien' ],      [ 'Endgerät-ID' ] );

    echo "<pre>";
    print_r( $join->rows() );
    echo "</pre>";

Ich versteh gerade echt nicht was ich falsch mache :(

P.S. Die Zeilenangaben entsprechen denen deiner original Dateien, habe nur deine "require_once" auskommentiert.
 
Der Fehler besteht darin, dass bei Dir die letzte Tabelle Systemendgerätedaten heißt und nicht Systemgerätedateien.
 
:oops: moah, wie dämlich -,- aber nun gehts! ;)

Herr schmeiß Hirn :D

Dann kann ich nun mal die PDF wieder Testen und das Script nun soweit dynamisch machen, dass man die CSV Dateien hochladen kann und ich die nicht fest im Quelltext angebe :)

Vielen vielen Dank!!!!

Nochn Tip wie ich das Mehrdimensionale Array nach der Spalte Nummern sortieren kann? Ein einfaches Array kriege ich ja noch hin und bei MYSQL ist das sortieren ja auch nicht das Thema :) Aber mehrdimensionale Arrays versuche ich immer zu meiden wegen diesem sortieren =/
 

Neue Beiträge

Zurück