Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

BK Simon

Treue Seele

  • »BK Simon« ist der Autor dieses Themas

Beiträge: 151

Beruf: Student

  • Private Nachricht senden

1

18.03.2014, 17:27

[PHP] Daten aus einer Datenbank in Excel speichern

Servus liebe Community,

ich arbeite derzeit an einem Projekt, bei dem ich Daten aus einer Datenbank auslese und anschließend in einer Excel-Datei Speichern muss.
Derzeit läuft es alles nur lokal auf einem XAMPP-Server und somit ist es auch eine MySQL Datenbank.

Soviel dazu, mein Problem ist folgendes...

In der Datenbank stehen in verschiedene Tabellen verteilt Kundendaten über vorhandene Schwerbehinderungnen, Schulabschlüsse oder sonstiges.
Diese Daten wurden vorher über Formulare eingegeben und in der Datenbank gespeichert.
Zum Speichern der Daten in Excel hatte ich vor das CSV-Format zu benutzen und dabei ist dann ein Problemchen aufgetaucht:

Hier der Code:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 <?php
 
    // Verbindungsdaten
    $host = "localhost"; 
    $username = "root"; 
    $password = ""; 
    $DB = "Kundendaten"; 
    
    $con = mysql_connect($host, $username, $password ); 
    
        $db = mysql_select_db("$DB", $con); 

        $sql_schwerbehinderung = mysql_query("SELECT * FROM schwerbehinderung");
        $sql_schulabschluss = mysql_query("SELECT * FROM schulabschluss");
        
        $list = array (
            array('Formular 3', 'Schwerbehindert', 'Grad', 'Anerkannt', 'Antrag', 'Formular 4', 'Abschluss_erworben', 'Datum_erworben', 'Durchschnitt_erworben', 'Abschluss_anstreben', 'Datum_anstreben', 'Durchschnitt_anstreben')
            );
            
        $i = 1;

        
        while($schwerbehinderung = mysql_fetch_row($sql_schwerbehinderung))
        {
            $schulabschluss = mysql_fetch_row($sql_schulabschluss);
            $list[$i] = array(' ', $schwerbehinderung[1], $schwerbehinderung[2], $schwerbehinderung[3], $schwerbehinderung[4]);
            $i++;
        }
        echo $schwerbehinderung[1];

        
    mysql_close($con); 

    $fp = fopen('file.csv', 'w');

    foreach ($list as $fields) 
    {
        echo $fields[1];
        fputcsv($fp, $fields, ";");
    }

    fclose($fp);
?>


Meine Idee war, dass ich in der Excel-Datei eine große Tabelle erzeuge mit allen Spalten, die auch die Tabellen in der Datenbank haben.

So sollte es in etwa aussehen, nur mit noch mehr Spalten:
[Formular 3] [Schwerbehindert] [Grad] [Anerkannt] [Antrag] [Formular 4] [Abschluss_erworben] [Datum_erworben] [Durchschnitt_erworben] [Abschluss_anstreben] [Datum_anstreben] [Durchschnitt_anstreben]
...

Diese Lösung wäre aber erstens sehr unübersichtlich und zweitens müsste man eine relativ große SQL-Abfrage schreiben, da man leider nur 1 mysql_fetch_row in einer while Schleife haben kann.

Ich wollte es nun also so machen, dass ich die einzelnen Formulare auf verschiedene Worksheets in Excel aufteile, damit man unten zwischen den Formularen wechseln kann.

Ich habe aber leider keinen Befehl für diese Operation, also zum Wechseln eines Worksheets gefunden, hat jemand vielleicht eine Idee wie ich dies anstellen kann oder vielleicht sogar eine Idee es noch besser darzustellen, da man durch das Aufteilen der einzelnen Formulare natürlich nicht mehr alles im Blick hat.


Ich wäre für jede Hilfe dankbar!

Gruß
Simon

2

18.03.2014, 18:28

CSV kennt keine Worksheets. Da müsstest du direkt eine xls/ods-Datei erstellen.

Zitat

zweitens müsste man eine relativ große SQL-Abfrage schreiben, da man leider nur 1 mysql_fetch_row in einer while Schleife haben kann.

Wieso relativ große SQL-Abfrage? Das ist ein einziger JOIN.
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

BK Simon

Treue Seele

  • »BK Simon« ist der Autor dieses Themas

Beiträge: 151

Beruf: Student

  • Private Nachricht senden

3

18.03.2014, 19:18

Es gibt noch weitaus mehr Tabellen als die 2, die im Code genannt sind.

Du könntest mir nicht vielleicht ein Beispielcode geben wie es mit einer XLS/ODS - Datei funktioniert?

4

18.03.2014, 20:50

Beispielcode hab ich gerade keinen, du solltest aber für beide Formate fertige Libs für PHP finden.

So ein JOIN sollte allerdings nicht so ein großes Problem sein, du kannst dir ja deine Query dynamisch zusammenbauen.
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

BK Simon

Treue Seele

  • »BK Simon« ist der Autor dieses Themas

Beiträge: 151

Beruf: Student

  • Private Nachricht senden

5

18.03.2014, 20:57

Der Query ist keinesfall ein Problem für mich, nur ist so eine unübersichtliche Tabelle schon nicht so eine schöne Lösung oder sind Tabellen mit ca. 25 Spalten oder mehr üblich in Excel ?

Diese Libs, sind das einfach nur .php Dateien, die man mit in den Projektordner packt und einfach in den Code einbindet ?

6

18.03.2014, 21:31

Diese Libs, sind das einfach nur .php Dateien, die man mit in den Projektordner packt und einfach in den Code einbindet ?

Ja, z.B. die oder die. Was genau sie können (oder auch nicht) musst du halt nachschauen.
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

BK Simon

Treue Seele

  • »BK Simon« ist der Autor dieses Themas

Beiträge: 151

Beruf: Student

  • Private Nachricht senden

7

18.03.2014, 23:21

Vielen Vielen Dank! Hast mir sehr geholfen ;)

Werbeanzeige