Ankündigung

Einklappen
Keine Ankündigung bisher.

While-Schleife: Überblick verloren, Hilfe gewünscht

Einklappen

Neue Werbung 2019

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

  • While-Schleife: Überblick verloren, Hilfe gewünscht

    Danke für's Vorbeischauen.

    Hier mein Problem in Kürze: ich kann in meiner MySQL-Datenbank die Länder auslesen, aus denen meine Website-Besucher kommen. Diese Ergebnisse lasse ich mir mit einer While-Schleife anzeigen (siehe: http://Navis.TerraRomana.org, dort "Demographic Data, Country Stats).

    Nur verursacht ein Programmierfehler meinerseits, daß die letzte Gruppe von Ländern mehrfach angezeigt wird. Ich selbst bin zwar kreativ und habe bereits viel versucht, aber irgendwie kann ich den Fehler nicht korrigieren.

    Sorry wenn der Code lang ist, aber dies dient der Vollständigkeit und Übersicht:
    PHP-Code:
      $GesamtZahl=0;
      
    $GesamtzahlLaender=0;
      include(
    "../Remus/#DbConn.php5");
      
    $Befehl="Select `Country`, COUNT(*) as `Amount` "// Länderstatistik
              
    "from `FNR_Visitors` ".
              
    "group by `Country` ".
              
    "order by `Amount` desc";
      
    $Anfrage=@mysql_query($Befehl,$Verbindung);
      while(
    $Datensatz=@mysql_fetch_assoc($Anfrage))
      { 
       
    $GesamtZahl=$GesamtZahl+$Datensatz["Amount"];
       
    $GesamtzahlLaender++;
      }
      
    $Restbestand=$GesamtzahlLaender;
      
    $ZehnerRunde=0// 10 Runden
      
    $ZahlenBisJetzt=0// abgehandelte Besucherzahlen
      
    $Gruppe=1// 10er-Gruppennummer
      
    $Befehl="Select `Country`, COUNT(*) as `Amount` "// Länderstatistik
              
    "from `FNR_Visitors` ".
              
    "group by `Country` ".
              
    "order by `Amount` desc";
      
    $Anfrage=@mysql_query($Befehl,$Verbindung);
      while(
    $Datensatz=@mysql_fetch_assoc($Anfrage))
      { 
       
    $ZehnLaender[]=$Datensatz["Country"];
       
    $ZehnZahlen[]=$Datensatz["Amount"];
       
    $ZahlenBisJetzt=$ZahlenBisJetzt+$Datensatz["Amount"];
       
    $ZehnerRunde++;
       if(
    $ZehnerRunde==10||$Restbestand<10// 10er-Grafik voll
       
    {
        if(
    $Restbestand>=10) { $ZehnLaender[]="(Group ".($Gruppe+1).")"; }
        if(
    $Restbestand>=10) { $ZehnZahlen[]=$GesamtZahl-$ZahlenBisJetzt; }
        
    $Titel="Countries audiencing FNR, Group ".$Gruppe;
        
        
    $Daten=array_reverse($ZehnZahlen);
        
    $graph=new PieGraph(500,250,"auto");
        
    $graph->SetShadow();
        
    $graph->title->Set($Titel);
        
    $graph->title->SetFont(FF_FONT1,FS_BOLD,18); 
        
    $graph->title->SetColor("black");
        
    $graph->subtitle->Set("(".Datum(time(now)).")");
        
    $graph->legend->Pos(0.025,0.15);
        
    $graph->img->SetAntiAliasing();
        
    $p1=new PiePlot3d($Daten);
        
    $p1->SetTheme("sand");
        
    $p1->SetCenter(0.35);
        
    $p1->SetSize(110);
        
    $p1->SetAngle(45);
        
    $p1->SetStartAngle(0);
        
    $p1->ShowBorder(false);
        
    $p1->value->SetColor("black");
        
    $p1->SetLegends($ZehnLaender);
        
    $graph->Add($p1);
        
    $graph->Stroke("../v/Deco/Data".$Gruppe.".jpg");
        
        
    $Grafik="<a href=\"../v/Deco/Data".$Gruppe.".jpg\" target=\"Page\" border=\"0\">".
                
    "<img src=\"../v/Deco/Data".$Gruppe.".jpg?=".time(now)."\" width=\"500\" height=\"250\" border=\"0\" ".
                
    "alt=\"Group ".$Gruppe."\" title=\"Group ".$Gruppe."\">".
                
    "</a>
    "
    ;
        
        if(
    $Gruppe>1)
        {
         
    $News2.="<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"730\" height=\"10\" class=\"Contents\">\n".
                 
    "<tr>\n".
                 
    "<td width=\"730\" align=\"left\" valign=\"top\">\n".
                 
    "</td>\n".
                 
    "</tr>\n".
                 
    "</table>\n";
        }
        
    $News2.="<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"730\" class=\"Contents\">\n".
                
    "<tr>\n".
                
    "<td width=\"500\" align=\"left\" valign=\"top\">\n".
                
    $Grafik."\n".
                
    "</td>\n".
                
    "<td width=\"10\" align=\"left\" valign=\"top\">\n".
                
    "</td>\n".
                
    "<td width=\"40\" align=\"right\" valign=\"top\">\n".
                
    "[b]Visits[/b]
    "
    .implode("x
    "
    ,$ZehnZahlen)."x".
                
    "</td>\n".
                
    "<td width=\"10\" align=\"left\" valign=\"top\">\n".
                
    "</td>\n".
                
    "<td width=\"170\" align=\"left\" valign=\"top\">\n".
                
    "[b]from Country[/b]
    "
    .implode("
    "
    ,$ZehnLaender).
                
    "</td>\n".
                
    "</tr>\n".
                
    "</table>\n";
        
        if(
    $Restbestand>=10$Gruppe++;
        if(
    $Restbestand>=10$ZehnLaender="";
        if(
    $Restbestand>=10$ZehnZahlen="";
        if(
    $Restbestand>=10$ZehnerRunde=0;
        if(
    $Restbestand>=10$Restbestand=$Restbestand-10;
       } 
      }
      include(
    "../Remus/#DbClose.php5"); 
    Ich bitte normalerweise auch nicht so bereitwillig um Programmierbeistand, jetzt aber tue ich es. Wer kann sich meinen Code anschauen und mir die Lösung zeigen? Vielen Dank für Zeit, Absicht, Mühe und Hilfe! Grüße,

    Sven
    sigpic
    Vielen Dank für Eure Zeit, Absicht, Mühe und für Eure Ideen. Grüße,
    Sven


  • #2
    Ne sorry .. aber das ist ja der Grottencode überhaupt.
    Was ist das hier?
    Code:
    $Befehl="Select `Country`, COUNT(*) as `Amount` ". // Länderstatistik
              "from `FNR_Visitors` ".
              "group by `Country` ".
              "order by `Amount` desc";
      $Anfrage=@mysql_query($Befehl,$Verbindung);
      while($Datensatz=@mysql_fetch_assoc($Anfrage))
      { 
       ...
      }
     ..
      $Befehl="Select `Country`, COUNT(*) as `Amount` ". // Länderstatistik
              "from `FNR_Visitors` ".
              "group by `Country` ".
              "order by `Amount` desc";
      $Anfrage=@mysql_query($Befehl,$Verbindung);
      while($Datensatz=@mysql_fetch_assoc($Anfrage))
      {
    Zwei mal die gleiche SQL-Abfrage?
    Und dann überall die Fehler unterdrückt.

    Und eingerückt ist auch nichts .. und die Variablenbezeichnungen .. also .. du hast zwar versucht
    die Variablen "gut" zu benennen .. aber ehrlich gesagt versteh ich nur Bahnhof.

    Das totale Wirrwarr.
    Ich denke du solltest da nochmals drüber nachdenken, was du da machst ..

    Das geht definitiv schneller und einfacher.
    privater Blog

    Kommentar


    • #3
      Hi. Mit der ersten Anfrage ermittle ich die Gesamtzahl aller Seitenbesuche und die Anzahl der Länder.

      Diese zwei Ergebnisse benötige ich für Funktionen innerhalb der zweiten Abfrage, daher die Vorab-Abfrage.

      Diese Graph-Befehle steuern ein "JPGraph"-Bild. In so einem Bild werden immer jeweils 10 Länder zusammengefaßt und als 11. Eintrag ein Verweis auf die nächste 10er-Ländergruppe.

      Ich rücke immer ein Leerzeichen pro Ebene ein. Grüße,

      Sven
      sigpic
      Vielen Dank für Eure Zeit, Absicht, Mühe und für Eure Ideen. Grüße,
      Sven

      Kommentar


      • #4
        Lies Dir mal was über die Aggregatfunktionen Count() und Sum() in mysql durch.

        Kommentar

        Lädt...
        X