Ankündigung

Einklappen
Keine Ankündigung bisher.

Statistik erstellen mit mehreren Schleifen

Einklappen

Neue Werbung 2019

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

  • Statistik erstellen mit mehreren Schleifen

    Hallo,
    ich bräuchte Eure Hilfe bei einer Umsetztung, bei der ich einfach nicht weiterkommen.

    Ich habe eine Tabelle names Bestellungen. Aus dieser Tabelle möchte ich die verkauften Artikel nach Länder getrennt rausfiltern, die übers Jahr verkauft wurden.

    Tabelle:

    Spalte: Bestellnummer - Kundenland - Artikel - Bestelljahr
    Beispiel1: 001 - Österreich - a:2:{i:33;i:1;i:36;i:1;} - 2009
    Beispiel2: 099 - Deutschland - a:2:{i:33;i:1;i:36;i:1;} - 2010
    usw.


    Die erste Schleife soll nun das Jahr auswerten und die zweite die in dem Jahr bestellten Artikel. Nachdem die Artikel über "unserialize ($artikel);" erst lesbar gemacht werden müssen, soll nun die Anzahl der einzelnen Artikeln nach dem Kundenland sortiert ausgegeben werden.

    Also so:

    Jahr 2009
    ArtikelNr: - Verkaufszahl in DE - Verkaufszahl in AT - Verkaufszahl in CH
    BP001 - 1 - 2 - 3

    Jahr 2010
    ArtikelNr: - Verkaufszahl in DE - Verkaufszahl in AT - Verkaufszahl in CHBP001
    BP001 3 - 4 - 5

    usw.

    Die erste Schleife:

    PHP-Code:
     $res mysql_db_query($dbase"select * from bestellung where kundenland = 'Deutschland' and hv_bestellung = '0' and bestellstatus != 'storno' or kundenland = 'Österreich' and hv_bestellung = '0' and bestellstatus != 'storno' or kundenland = 'Schweiz' and hv_bestellung = '0' and bestellstatus != 'storno' group by bestell_jahr");
      while (
    $daten mysql_fetch_object($res)) 
      {      
       
    $listeIntern .= '<tr>
            <td width=10% class=bestellText><b><i>'
    .$daten->bestell_jahr.'</i></b></td>
           </tr>'
    ;
       
    $liste .= $listeIntern;  
      }
     
     return 
    $liste;
     } 
    Leider bekomme ich es aber nicht hin, dass ich unterhalb der ersten Schleife weitere Schleifen so einbaue, das das o.g. Ergebnis dabei rauskommt. Ich bitte um Eure Hilfe.

    Natürlich ist es mit "unserialize ($artikel);" kein schöner Weg, jedoch kann ich daran nichts mehr ändern.

    DANKE.


  • #2
    hol dir halt erst die möglichen Jahreszahlen, danach jahreszahlenbedingt die eigentlichen rows, wo liegt denn dein Problem, weißt du nicht wie du das in SQL definierst oder in PHP ? Beides ?
    [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

    Kommentar


    • #3
      Du gibst die Daten aus, schön. Aber du gruppierst hier nicht.
      "Mein Name ist Lohse, ich kaufe hier ein."

      Kommentar


      • #4
        Ich gruppier doch nach bestell_jahr, die Ausgabe der verschiedenen Jahre funktioniert ja. Jedoch bekomme ich es nicht hin, jetzt innerhalb des Jahres die verkauften Artikel auszugeben und diese dann zu definieren und dem Land zuzuordnen. Also das heißt in einem Jahr wurden beispielsweise 10 deutsche Bestellungen getätigt. Diese Bestellungen enthalten eine beliebige Anzahl an Artikeln, die dann natürlich wieder für das ganze Jahr zusammengezählt werden müssen.

        Vielleicht liegt es daran, dass ich die verschiedenen Listen, die sich aus den Schleifen ergeben, einfach falsch zusammensetze.

        PHP-Code:
        function getMonate()
         {
         
        $liste '';
         
        $listeIntern '';
         include(
        "_inc/config.inc.php");
         
        $db mysql_connect($host$user$pass);
         
        $res mysql_db_query($dbase"select * from bestellung where kundenland = 'Deutschland' and hv_bestellung = '0' and bestellstatus != 'storno' or kundenland = 'Österreich' and hv_bestellung = '0' and bestellstatus != 'storno' or kundenland = 'Schweiz' and hv_bestellung = '0' and bestellstatus != 'storno' group by bestell_jahr");
          while (
        $daten mysql_fetch_object($res)) 
          {      
           
        $listeIntern .= '<tr>
                <td width=10% class=bestellText><b><i>'
        .$daten->bestell_jahr.'</i></b></td>
               </tr>'
        ;
           while (
        $daten2 mysql_fetch_object($res))
           {
            
        $listeIntern2 .= '<tr>
                <td width=10% class=bestellText>'
        .$daten2->artikel.'</td>
               </tr>'
        ;
         

            
        $listeIntern .= $listeIntern2;
           }
           
        $liste .= $listeIntern;  
          }
           
         return 
        $liste;
         } 

        Kommentar


        • #5
          Dann trenn doch erstmal die Verarbeitung von der Ausgabe, andernfalls wirst du ohne Hacks immer genausoviel Ausgabetreffer wie Ergebniszeilen haben.

          Deine SQL-Bedingung ist auch zweifelhaft mit AND und OR ohne Klammerung. Durchlauf deine Datensaetze ohne SQL-Gruppierung und speicher die relevanten Werte in einem Array ab.

          PHP-Code:
          <?php
          $data 
          = array();
          while (
          mysql_fetch_assoc(..) as $row) {
            
          $year $row["jahr"];
            
          $country $row["land"];
            
          $articles unserialize($row["artikel"]);
            if (!
          array_key_exists($year$data)) {
              
          $data[$year] = array();
            }
            if (!
          array_key_exists($country$data[$year])) {
              
          $data[$year][$country] = array();
            }
            
          $data[$year][$country][] = $articles;
          }
          print_r($data);
          ?>
          "Mein Name ist Lohse, ich kaufe hier ein."

          Kommentar


          • #6
            Stimmt, die SQL-Bedingung macht so keinen Sinn, habe sie nun geändert in:

            PHP-Code:
            select bestell_jahrkundenlandartikel from bestellung where hv_bestellung '0' and bestellstatus != 'storno' group by bestell_jahr 

            Kommentar


            • #7
              Zitat von Leinberger Beitrag anzeigen
              Stimmt, die SQL-Bedingung macht so keinen Sinn, habe sie nun geändert in:

              PHP-Code:
              select bestell_jahrkundenlandartikel from bestellung where hv_bestellung '0' and bestellstatus != 'storno' group by bestell_jahr 
              ich geb dir den tip Sql-Statements immer groß zu schreiben, du kannst dann leichter werte / felder von befehlen unterscheiden:

              Code:
              SELECT bestell_jahr, kundenland, artikel FROM bestellung
              WHERE hv_bestellung='0' AND bestellstatus!='storno' GROUP BY bestelljahr;
              wird übrigens in der Mysql doku auch so gemacht. Im übrigen schließt man jedes Query der Syntax halber mit einem ; ab
              [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

              Kommentar


              • #8
                Zitat von tr0y Beitrag anzeigen
                Im übrigen schließt man jedes Query der Syntax halber mit einem ; ab
                PHP: mysql_query - Manual
                Hinweis: Die Anfrage sollte nicht mit einem Semikolon enden.
                "Mein Name ist Lohse, ich kaufe hier ein."

                Kommentar


                • #9
                  missversteh mich nicht: Anfagen gesendet mit php nicht. Ich spreche auch vom SQL-Syntax

                  PHP-Code:
                  $query mysql_query("SELECT * FROM `poff` WHERE `id`='1'"); 
                  Code:
                  SELECT * FROM `poff` WHERE `id`='1';
                  SELECT * FROM `piff` WHERE `id`='64562';
                  SELECT * FROM `paff` WHERE `id`='35645';
                  [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                  Kommentar


                  • #10
                    Dann erklär uns doch mal, was dieser Hinweis für eine Bedeutung in diesem Thread hatte. Denn so warst Du nur falsch zu verstehen.
                    --

                    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                    --

                    Kommentar


                    • #11
                      Lesbarkeit der Queries. Hat in etwa die selbe Gewichtung wie falsch eingerückter php-Quellcode, indem man in nicht-selbstbrechenden Quellcode-Frames stundenlang nach rechts scrollen kann. Wie ich finde :P

                      Ich hatte das nur angemerkt damit er zum einen die Möglichkeit sieht übersichtlicher zu arbeiten und wir ( ich ) den hier geposteten Source besser ( gewohnter ? ) lesen können.
                      [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                      Kommentar

                      Lädt...
                      X