Abfrage Ergebnis festlegen

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

  • Abfrage Ergebnis festlegen

    Hallo,
    ich möchte eine Statistik erstellen.
    PHP-Code:
        $sql "SELECT 
                    COUNT(sid) AS sid_anzahl, 
                    COUNT(DISTINCT(sid)) AS sid_anzahl_unique,
                    time,
                    DATE_FORMAT(time, '%c') AS time_monat_c,
                    DATE_FORMAT(time, '%M') AS time_monat_M 
                FROM mytable
                WHERE
                    DATE_FORMAT(time, '%Y') = "
    .$sql_jahr."
                GROUP BY time_monat_c
                ORDER BY time ASC;"
    ;
        
    $result=mysql_query($sql);
        echo 
    "<table cellpadding=\"0\" cellspacing=\"0\" border=\"1\" style=\"margin-bottom:10px;\">\n";
        echo 
    "<tr>\n";
        echo 
    "\t<td colspan=\"2\" align=\"right\"><b>Monat</b></td>\n";
        echo 
    "\t<td style=\"padding-left:10px;\"><b>Unterschiedliche Besucher</b></td>\n";
        echo 
    "\t<td style=\"padding-left:10px;\"><b>Seitenaufrufe</b></td>\n";
        echo 
    "</tr>\n";
        while (
    $row mysql_fetch_assoc($result)) {    
            echo 
    "<tr>\n";
            echo 
    "\t<td>".$row['time_monat_M']."</td>\n";
            echo 
    "\t<td align=\"right\">".$row['time_monat_c']."/".$sql_jahr."</td>\n";
            echo 
    "\t<td align=\"right\">".$row['sid_anzahl_unique']."</td>\n";
            echo 
    "\t<td align=\"right\">".$row['sid_anzahl']."</td>\n";
            echo 
    "<tr>\n";
        }
        echo 
    "</table>\n"
    So sieht momentan das Ergebnis aus:
    August 8/2007 2425 25683

    September 9/2007 5556 30169
    October 10/2007 8557 50854
    November 11/2007 7484 51667
    December 12/2007 2769 11102


    Es sind nur Daten ab August vorhanden. Nun möchte ich, das er aber das ganze Jahr anzeigt. Also von Januar und dann ebend einfach 0 anzeigt.
    Kann ich eine Sql Abfrage so gestalten, das ich es für jeden Monat habe?

    Januar 1/2007 0 0
    Februar 2/2007 0 0
    ....

    August 8/2007 2425 25683
    September 9/2007 5556 30169
    October 10/2007 8557 50854
    November 11/2007 7484 51667
    December 12/2007 2769 11102
    Gut geraten ist halb gewußt.

  • #2
    da du das Script ja wahrscheinlich nächstes Jahr auch noch benutzen willst, würd ich die paar Einträge einfach von Hand inner Datenbank vornehmen, aber es gibt aber auch sowas ohne das extra einzugeben, aber ich komm grad nicht drauf

    Kommentar


    • #3
      Naja, das gleiche würde ja dann auch auf die Tage zutreffen, falls ich mir diese ausgeben lassen möchte.
      Wenn Tag 1 bis 10 vorhanden ist, möchte ich das er mir den Monat bis Tag 28 oder auch 31 darstellt. Je nachdem.

      Suche so eine Art BETWEEN = '".$von."' AND '".$bis."'"; für das Datum.
      Gut geraten ist halb gewußt.

      Kommentar


      • #4
        Hab mir das mal durch den Kopf gehen lassen.
        Alternativ könnte ich ein Array machen.
        $jahr[1] = "";
        $jahr[2]="";
        ....usw.

        Im ersten durchlauf könnte ich die Werte speichern, wenn vorhanden, und im 2 Durchlauf denn alles ausgeben. Aber ich würde das schon am liebsten per sql lösen um den Mehraufwand zu sparen.
        Gut geraten ist halb gewußt.

        Kommentar


        • #5
          Die Datenbank behandelt in erster Linie (vorhandene) Daten. Bis zu einem gewissen Punkt kann sie zwar auch mit nicht vorhandenen umgehen. Mit einer "Stored Procedure" liesse sich das auch auf der DB lösen. Ich würde aber ausnahmsweise emfehlen, dazu PHP zu benutzen. Das könnte dann etwa so aussehen:
          PHP-Code:
          $sql "SELECT 
                          COUNT(sid) AS sid_anzahl, 
                          COUNT(DISTINCT(sid)) AS sid_anzahl_unique,
                          MONTH(time) AS time_monat_c,
                          MONTHNAME(time) AS time_monat_M 
                      FROM 
                          mytable
                      WHERE
                          YEAR(time) = 
          $sql_jahr
                      GROUP BY 
                          time_monat_c
                      ORDER BY 
                          time ASC"
          ;
          $daten = array();
          $result mysql_query($sql);
          while (
          $obj mysql_fetch_object($result)) {    
              
          $daten[$obj->time_monat_c] = array($obj->time_monat_M$obj->sid_anzahl$obj->sid_anzahl_unique);
          }
              
          echo 
          "<table cellpadding='0' cellspacing='0' border='1' style='margin-bottom:10px;'>\n<tr>\n";
          echo 
          "\t<td colspan='2' align='right'><b>Monat</b></td>
                \t<td style='padding-left:10px;'><b>Unterschiedliche Besucher</b></td>
                \t<td style='padding-left:10px;'><b>Seitenaufrufe</b></td>
                </tr>\n"
          ;

          for(
          $i 1;$i <= 12;$i ++){    
              if(isset(
          $daten[$i])){
                  
          $mon_n $daten[$i][0];
                  
          $besucher $daten[$i][1];
                  
          $aufrufe $daten[$i][2];
              }
              else{
                  
          $mon_n date('F'mktime(000$i);
                  
          $besucher 0;
                  
          $aufrufe 0;
              }
              echo 
          sprintf("<tr>\t<td>%s</td>\n\t<td align='right'>%2d/%4d</td>\n\t
                            <td align='right'>%d</td>\n\t<td align='right'>%d</td>\n<tr>\n"
          ,
                      
          $mon_n,
                      
          $j,
                      
          $sql_jahr,
                      
          $besucher,
                      
          $aufrufe);
          }
          echo 
          "</table>\n"
          Für Tage musst du das natürlich entsprechend umbauen
          Zuletzt geändert von H2O; 12.12.2007, 08:38.
          Gruss
          H2O

          Kommentar


          • #6
            Ich würde aber ausnahmsweise emfehlen, dazu PHP zu benutzen.
            Na ok, dachte mit sql wäre das besser. Na denn mache ich das mit php.

            Danke
            Gut geraten ist halb gewußt.

            Kommentar


            • #7
              PHP-Code:
                  $result=mysql_query($sql);
                  
              $arr_m = array();
                  for(
              $i=1;$i<=12;$i++) {
                      
              $arr_m[$i]['time_monat_M']     = date('F'mktime(000$i));
                      
              $arr_m[$i]['time_monat_c']     = $i;
                      
              $arr_m[$i]['sid_anzahl_unique']= 0;
                      
              $arr_m[$i]['sid_anzahl']       = 0;
                  }
                  while (
              $row mysql_fetch_assoc($result)) {    
                      
              $arr_m[$row['time_monat_c']]['time_monat_M']      = $row['time_monat_M'];
                      
              $arr_m[$row['time_monat_c']]['time_monat_c']      = $row['time_monat_c'];
                      
              $arr_m[$row['time_monat_c']]['sid_anzahl_unique'] = $row['sid_anzahl_unique'];
                      
              $arr_m[$row['time_monat_c']]['sid_anzahl']        = $row['sid_anzahl'];
                  }    
                  echo 
              "<table cellpadding=\"0\" cellspacing=\"0\" border=\"1\" style=\"margin-bottom:10px;\">\n";
                  echo 
              "<tr>\n";
                  echo 
              "\t<td colspan=\"2\" align=\"right\"><b>Monat</b></td>\n";
                  echo 
              "\t<td style=\"padding-left:10px;\"><b>Unterschiedliche Besucher</b></td>\n";
                  echo 
              "\t<td style=\"padding-left:10px;\"><b>Seitenaufrufe</b></td>\n";
                  echo 
              "</tr>\n";
                  foreach (
              $arr_m as $k=>$v) {
                      echo 
              "<tr>\n";
                      echo 
              "\t<td>".$v['time_monat_M']."</td>\n";
                      echo 
              "\t<td align=\"right\">".$v['time_monat_c']."/".$sql_jahr."</td>\n";
                      echo 
              "\t<td align=\"right\">".$v['sid_anzahl_unique']."</td>\n";
                      echo 
              "\t<td align=\"right\">".$v['sid_anzahl']."</td>\n";
                      echo 
              "<tr>\n";        
                  }
                  echo 
              "</table>\n"
              Ok, in php kein Ding und haut hin. Danke
              Gut geraten ist halb gewußt.

              Kommentar

              Lädt...
              X