Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Mehrere SQL Abfragen in EINE Exceltab exportieren

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Mehrere SQL Abfragen in EINE Exceltab exportieren

    Hallo,

    habe gerade schon ein Problem lösen können (PHPEinsteiger).

    Nun hab ich direkt das nächste.

    Ich habe ein script mit SQL Abfrage, diese Abfrage wird in eine Excel Tab exportiert:

    PHP-Code:
    <?php
    $db 
    "MN-Gruppe";
    $verbindung mssql_connect ("IP","User""Passwort")
    or die(
    "Verbindung zur Datenbank konnte nicht hergestellt werden");
    mssql_select_db('['.$db.']',$verbindung) or die ("Datenbank konnte nicht ausgewählt werden");
    $start $_POST[start];
    $ende $_POST[ende];
    $select "SELECT dbo.KHKLagerplatzbuchungen.Bewegungsdatum, dbo.KHKLagerplatzbuchungen.Artikelnummer, dbo.KHKArtikel.Artikelgruppe, dbo.KHKLagerplatzbuchungen.Bewegungsart, dbo.KHKArtikel.Matchcode, dbo.KHKLagerplatzbuchungen.MengeLager, dbo.KHKArtikel.Lagermengeneinheit
    FROM dbo.KHKLagerplatzbuchungen LEFT JOIN dbo.KHKArtikel ON (dbo.KHKLagerplatzbuchungen.Mandant = dbo.KHKArtikel.Mandant) AND (dbo.KHKLagerplatzbuchungen.Artikelnummer = dbo.KHKArtikel.Artikelnummer)
    WHERE (((dbo.KHKLagerplatzbuchungen.Bewegungsdatum) BETWEEN CONVERT(datetime, '
    $start', 104) AND CONVERT(datetime, '$ende', 104)) AND ((dbo.KHKArtikel.Artikelgruppe)='60600' Or (dbo.KHKArtikel.Artikelgruppe)='20600' Or (dbo.KHKArtikel.Artikelgruppe)='21600') AND ((dbo.KHKLagerplatzbuchungen.Bewegungsart) Like 'ZM' Or (dbo.KHKLagerplatzbuchungen.Bewegungsart)='ZF') AND ((dbo.KHKLagerplatzbuchungen.Mandant)='90'))";
    $export mssql_query($select);
    $fields mssql_num_fields($export);
    for (
    $i 0$i $fields$i++) {
        
    $header .= mssql_field_name($export$i) . "\t";
    }
    while(
    $row mssql_fetch_row($export)) {
        
    $line '';
        foreach(
    $row as $value) {
            if ((!isset(
    $value)) OR ($value == "")) {
                
    $value "\t";
            } else {
                
    $value str_replace('"''""'$value);
                
    $value '"' $value '"' "\t";
            }
            
    $line .= $value;
        }
        
    $data .= trim($line)."\n";
    }
    $data str_replace("\r","",$data);
    if (
    $data == "") {
        
    $data "\n(0) Records Found!\n";
    }
    header("Content-type: application/x-msdownload");
    header("Content-Disposition: attachment; filename=Lagerbewegungen_Gesamt.xls");
    header("Pragma: no-cache");
    header("Expires: 0");
    print 
    "$header\n$data";
    ?>
    Soweit funktioniert das bestens.

    Nun habe ich aber das Problem, das ich noch 4 weiter SQL Abfragen (wie oben nur andere Artikelgruppen) habe, die jeweils auch (auf ein eigenes Tabellenblatt) in die exportierte Excel Tabelle rein sollen.

    Ist dies irgendwie machbar?

    Vielen Dank für Eure Hinweise.

    Grüße

    Michael
    PHP-Code:
    require_once("func_leo.php");
    if(
    leo()!= 0){echo "Noch ".leo()." Tage !";}
    else{echo 
    "Hallo Leo ! && Vatti = 3*";} 

  • #2
    Mehrere identische SQL-Abfragen lassen sich mit UNION aneinander hängen. Voraussetzung ist die identische Anzahl an Spalten in der SELECT-Liste. Voraussetzung ist, dass der SQL-Treiber für Access dies auch unterstützt.

    Beispiel (Verbund über Drei Tabellen mit drei Spalten):
    Code:
    SELECT col1, col2, col3 FROM tabelle1 
    
    UNION ALL
    
    SELECT colA, ColB, colC FROM tabelle2
    
    UNION ALL
    
    SELECT a1, a2, a3 FROM tabelle3
    Frage zu dem mssql_connect () und dem Zugriff auf die Access-DB. Hast Du lokal (bzw. dort wo das PHP läuft) einen MSSQL-Client installiert?

    Grüße
    Thomas

    Kommentar


    • #3
      Hallo Thomas,

      Vielen Dank für die Antwort.

      In meinen Abfragen sind ALLE Spalten gleich, die einzigste Änderung ist die Artikelgruppe bei WHERE

      PHP-Code:
      WHERE (dbo.KHKArtikel.Artikelgruppe)='60600' 
      Wie baue ich dasn nun in Deinen Hinweis ein?

      Wegen MSSQL Connection:

      Auf dem Webserver (Apache2, php5, mysql5) muss die Extension mssql.so in die php.ini eingetragen werden (gibts glaub ich als Download Paket) auf dem SQL Server muss eine DLL ersetz werden.

      Hier ist es ganz gut beschrieben:PHP: Anforderungen - Manual

      Grüße

      Michael
      PHP-Code:
      require_once("func_leo.php");
      if(
      leo()!= 0){echo "Noch ".leo()." Tage !";}
      else{echo 
      "Hallo Leo ! && Vatti = 3*";} 

      Kommentar


      • #4
        Zitat von Micha72 Beitrag anzeigen
        In meinen Abfragen sind ALLE Spalten gleich, die einzigste Änderung ist die Artikelgruppe bei WHERE

        PHP-Code:
        WHERE (dbo.KHKArtikel.Artikelgruppe)='60600' 
        Wie baue ich dasn nun in Deinen Hinweis ein?
        Dann reicht vielleicht auch nur ein OR in der WHERE klausel.

        Code:
        ...
        WHERE ( (dbo.KHKArtikel.Artikelgruppe)='60600' )
               OR ((dbo.KHKArtikel.Artikelgruppe)='60601' )
               OR ((dbo.KHKArtikel.Artikelgruppe)='60602' )
        ...
        Bei den Klammern bin ich mir nicht sicher, da ich es hier nicht testen kann.

        Grüße
        Thomas

        Kommentar


        • #5
          Hallo,

          ich glaub wir reden aneinander vorbei.

          Ich habe insgesamt 4 SQL Abfragen, die sich jeweils nur in der Artikelgruppe unterscheiden.

          Die Artikelgruppen sind Abteilungsbezogen.

          Am Ende soll eine Exceltabelle raus kommen, die pro Abteilung (Anhand der Artikelgruppen) ein Tabellenblatt hat.

          Eine SQL Abfrage ist die Gesamt Liste. diese sollte als 1. Tabellenblatt aufgeführt sein.

          Im Moment mach ich es halt so, das ich NUR die Gesamtliste ziehe und anhand der Artikelgruppen händisch die anderen Tabellenblätter anlege und die Daten dort rein kopiere.

          Da aber die Leuts aus der Abteilung das selbst machen sollen, ist der Weg etwas umständlich (User halt).

          Also, kurz gesagt, 4 Abfragen = 4 Tabellenblätter in 1 ExcelMappe mit 1 Script erstellt.

          Wobei sich die 4 Abfragen NUR in der Artikelgruppe unterscheiden.

          Vielen Dank für Deine Hilfe

          Grüße

          Michael
          PHP-Code:
          require_once("func_leo.php");
          if(
          leo()!= 0){echo "Noch ".leo()." Tage !";}
          else{echo 
          "Hallo Leo ! && Vatti = 3*";} 

          Kommentar


          • #6
            Okay, du willst aus einer Ergebnismenge (der SQL-Anfrage) mehrere Excel-Tabs (Blätter) erzeugen.

            Da fällt mir keine Lösung dazu ein, da Du ja auch nur einen Datenstrom "Lagerbewegungen_Gesamt.xls" zum Browser schickst. Was Excel dann damit macht, hast Du nicht mehr unter Kontrolle.

            header("Content-type: application/x-msdownload");
            header("Content-Disposition: attachment; filename=Lagerbewegungen_Gesamt.xls");
            header("Pragma: no-cache");
            header("Expires: 0");
            print "$header\n$data";
            Eventuell kannst Du mit VBA-Makros etwas erreichen oder mit der PEAR Klasse
            Spreadsheet_Excel_Writer

            Grüße
            Thomas

            Kommentar


            • #7
              Da Du kein Exceldokument, sondern einfach nur CSV mit XLS-Endung erzeugst, dürfte dies nicht möglich sein. [WIKI]CSV[/WIKI] kennt keine Tabellenblätter, Formatierungen o.ä.
              [COLOR="#F5F5FF"]--[/COLOR]
              [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
              [COLOR="#F5F5FF"]
              --[/COLOR]

              Kommentar


              • #8
                Hi Thomas,

                Danke Dir.

                VBA wäre in Ordnung, NUR müsste ich das Makro jeden Monat neu schreiben (oder kopieren und einfügen) was bedeuten würde, ich müsste das Script selbst ausführen und nicht der Abteilungsleiter.

                Hmmmm...

                Ich werds so machen, das die einzelnen Abteilungen eine EMail mit Excelliste bekommen und der Abteilungsleiter eine Gesamt Liste.

                Mal schaeun wie ich das am besten in 1 Script bekomme...

                Huijuijui...

                Vielen Dank trotzdem.

                Grüße

                Michael
                PHP-Code:
                require_once("func_leo.php");
                if(
                leo()!= 0){echo "Noch ".leo()." Tage !";}
                else{echo 
                "Hallo Leo ! && Vatti = 3*";} 

                Kommentar


                • #9
                  Hi nikosch,

                  hättest Du den einen Tip, wie ich das Vorhaben realisieren könnte?

                  Vielen Dank

                  Grüße

                  Michael
                  PHP-Code:
                  require_once("func_leo.php");
                  if(
                  leo()!= 0){echo "Noch ".leo()." Tage !";}
                  else{echo 
                  "Hallo Leo ! && Vatti = 3*";} 

                  Kommentar


                  • #10
                    Naja, Spreadsheet_Excel_Writer, also die Erzeugung eines "echten", binären Excelfiles, wurde ja schon genannt. Mit Klartextformaten bekommst Du das nicht hin.
                    [COLOR="#F5F5FF"]--[/COLOR]
                    [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                    [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                    [COLOR="#F5F5FF"]
                    --[/COLOR]

                    Kommentar


                    • #11
                      Hallo Nikosch,

                      Danke für den Hinweis, ich werde mich da mal rein lesen.

                      Grüße

                      Michael
                      PHP-Code:
                      require_once("func_leo.php");
                      if(
                      leo()!= 0){echo "Noch ".leo()." Tage !";}
                      else{echo 
                      "Hallo Leo ! && Vatti = 3*";} 

                      Kommentar


                      • #12
                        Hallo Michael,

                        hast Du Dir schon mal den Excel-Autofilter angeschaut?

                        Der ist einfach zu bedienen, dies sollte jeder können und damit kann jede Abteilung "Ihre" Daten selektieren und sehen (ausser natürlich, wenn jede Abteilung nur ihre eigenen Daten sehen darf).

                        Ich persönlich tendiere ja dazu, jeder Abteilung eine eigene Maske / SQL-Abfrage zur Verfügung zu stellen und damit jeder Abteilung nur ihre Daten zu zeigen. Sowas läßt sich auch gut mit einer bzw. mehreren MySQL VIEW erledigen.

                        Grüße
                        Thomas

                        Kommentar


                        • #13
                          Hallo Thomas,

                          so werd ichs machen, ich mach eine Auswahl mit der Abteilung und anhand dieser Auswahl bekommt der Leiter die Daten.

                          Die Daten der anderen Abteilung sind nicht so wichtig als das ich diese schützen müsste.

                          Der Produktionsleiter kann sich dann eine Gesamtliste ziehen.

                          Dann bau ich noch ne Druckfunktion ein und gut iss.

                          Ich wollte es erst umständlich in Excel programmieren, aber das ist mir angesichts des Wetters heute zu anstrengend

                          Das es bis heute Nachmittag fertig sein soll, gehe ich den für mich schnelleren Weg.

                          Vielen Dank für Eure Hilfe

                          Grüße

                          Michael
                          PHP-Code:
                          require_once("func_leo.php");
                          if(
                          leo()!= 0){echo "Noch ".leo()." Tage !";}
                          else{echo 
                          "Hallo Leo ! && Vatti = 3*";} 

                          Kommentar

                          Lädt...
                          X