Berechnung eines Rankings scheitert...

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

  • Berechnung eines Rankings scheitert...

    Hallo Wissende,

    ich habe versucht ein Ranking, also eine Spieltagstabelle im Fussball zu berechnen, bekomme es aber einfach nicht hin. Also es läuft schon, aber ich denke mal, dass mein Problem darin besteht, dass ich nicht in der Lage bin dynamische mehrdimensional Arrays zu erzeugen - falls das überhaupt der richtige Weg ist.

    Im folgenden kann der geneigte Helfer sehen, wie ich es derzeit löse. Der Code ist nicht sonderlich, aber ich kanns nicht besser.

    Folgendes passiert in dem Script:
    Das Script soll eine Tabelle in einer Liga einer bestimmten Saison bis zu einem bestimmten Spieltag berechnen.
    Folgendes Problem habe ich hierbei. Ich ging davon aus, dass ich mit folgendem Code in einem mehrdimensionalen Array einen eindeutigen Eintrag erstellen kann.
    PHP-Code:
    $ranking[$teams_count->id][0] = $match_count->team_a_id
    Leider scheint das so nicht zu stimmen, denn es wird mir jedes mal, wenn ich diesen Aufruf so tätige ein neuer Array angelegt, was zur Folge hat, dass in meiner Tabelle am 3. Spieltag jedes Team 3 mal gelistet wird, da dieser Eintrag im Array 3 mal vorgenommen wurde, weil die Team_id 3 mal gefunden wurde.

    Ich habe keine Ahnung ob jemand von versteht was ich meine, werde aber gern weitere Fragen beantworten.

    PHP-Code:
    function GetRankingOfRound($league_id$season_id$round)
    {
        
    //wir holen uns nur mal so die anzahl der gefundenen spiele
        
    $sql "SELECT * FROM sdl_rounds WHERE season_id ='$season_id' and league_id='$league_id' and round <= '$round'";
        
    $erg mysql_query($sql);
        
    $rowy mysql_num_rows($erg);
        
    $rows 1;

        echo(
    "<table cellspacing=\"0\" cellpadding=\"0\" width=\"812px\">\n");
        echo(
    "<tr><th>Tabelle ".$round." Spieltag</th><th>Punkte</th><th>Tore</th><th>Diff</th></tr>\n");

        
    //wir holen uns die wertigkeit eines spieles aus der db
        
    $sql "SELECT pts_g,pts_u,pts_v FROM sdl_leagues WHERE id='$league_id'";
        
    $details mysql_query($sql);
        
    $res mysql_fetch_object($details);
            
    $pts_g $res->pts_g#gewinner
            
    $pts_u $res->pts_u#unentschieden
            
    $pts_v $res->pts_v#verloren

        //nur zum debuggen
        
    echo 'Sieg:'.$pts_g;
        echo 
    'Loos:'.$pts_v;
        echo 
    'Unen:'.$pts_u;

        
    #alle teams der liga durchkauen und von jedem team jedes spiel eines spieltages holen
        
    $sql     "Select * from sdl_teams where league_id = '$league_id'";
        
    $teams     mysql_query($sql);
        while (
    $teams_count mysql_fetch_object($teams)) {
            
    $sql=  "SELECT * FROM sdl_rounds
                    WHERE season_id ='
    $season_id' AND
                    league_id ='
    $league_id' AND
                    round <='
    $round' AND
                    (team_a_id ="
    .$teams_count->id." OR team_b_id =".$teams_count->id.")";
            
    $matches mysql_query($sql);
            while (
    $match_count mysql_fetch_object($matches)) {
                
    //das gesuchte team ist team a und hat gewonnen
                
    if (($match_count->team_a_id == $teams_count->id) and ($match_count->result_a $match_count->result_b)) {
                  
    //erzeuge eindeutigen eintrag im array mit team_id
                  
    $ranking[$teams_count->id][0] = $match_count->team_a_id;
                  
    //lies bisherige gewonnene punkte ein
                  
    $pts $ranking[$teams_count->id][1];
                  
    //schreibe aktualisierte punkte zurück
                  
    $ranking[$teams_count->id][1] = $pts+$pts_g;
                }
                
    //das gesuchte team ist team a und hat verloren
                
    else if (($match_count->team_a_id == $teams_count->id) and ($match_count->result_a $match_count->result_b)) {
                  
    $ranking[$teams_count->id][0] = $match_count->team_a_id;
                  
    $pts =$ranking[$teams_count->id][2];
                  
    $ranking[$teams_count->id][2] = $pts+$pts_v;
                }
                
    //das gesuchte team ist team a und hat unentschieden
                
    else if (($match_count->team_a_id == $teams_count->id) and ($match_count->result_a $match_count->result_b)) {
                  
    $ranking[$teams_count->id][0] = $match_count->team_a_id;
                  
    $pts =$ranking[$teams_count->id][3];
                  
    $ranking[$teams_count->id][3] = $pts+$pts_u;
                }
                
    //das gesuchte team ist team b und hat gewonnen
                
    else if (($match_count->team_b_id == $teams_count->id) and ($match_count->result_b $match_count->result_a)) {
                  
    $ranking[$teams_count->id][0] = $match_count->team_b_id;
                  
    $pts $ranking[$teams_count->id][1];
                  
    $ranking[$teams_count->id][1] = $pts+$pts_g;
                }
                
    //das gesuchte team ist team b und hat verloren
                
    else if (($match_count->team_b_id == $teams_count->id) and ($match_count->result_b $match_count->result_a)) {
                  
    $ranking[$teams_count->id][0] = $match_count->team_b_id;
                  
    $pts =$ranking[$teams_count->id][2];
                  
    $ranking[$teams_count->id][2] = $pts+$pts_v;
                }
                
    //das gesuchte team ist team b und hat unentschieden
                
    else if (($match_count->team_b_id == $teams_count->id) and ($match_count->result_b $match_count->result_a)) {
                  
    $ranking[$teams_count->id][0] = $match_count->team_b_id;
                  
    $pts =$ranking[$teams_count->id][3];
                  
    $ranking[$teams_count->id][3] = $pts+$pts_u;
                }
              
    //addiere die tore
              
    $ranking[$teams_count->id][4] = $ranking[$teams_count->id][4] + $match_count->result_a;
              
    $ranking[$teams_count->id][5] = $ranking[$teams_count->id][5] + $match_count->result_b;
              echo(
    "<tr><td>".GetTeamName($ranking[$teams_count->id][0])."</td>\n");
                echo(
    "<td>".$ranking[$teams_count->id][1]."</td>\n");
                echo(
    "<td>".$ranking[$teams_count->id][4].":");
                echo(
    $ranking[$teams_count->id][5]."</td>\n");
                echo(
    "<td>".($ranking[$teams_count->id][4]-$ranking[$teams_count->id][5])."</td>\n");
            }
        }
           echo(
    "</table>\n");
        echo 
    'Gesamte Spiele: '.$rowy;
        
    print_r($ranking);

    Wenn ich Euch jetzt fragt, was am Output rauskommt hier mal ein kleines Beispiel zum 3. Spieltag

    erwünscht gewesen wäre
    Tabelle 3 Spieltag Punkte Tore Diff
    Bayern München 3 7:4 3

    ich erhalte aber
    Tabelle 3 Spieltag Punkte Tore Diff
    Bayern München 2:2 0
    Bayern München 3:3 0
    Bayern München 3 7:4 3

    wobei die einzelnen Einträge exakt den einzelnen Spieltagen entspricht.
    Die Punkte sind leider falsch, da wohl ein Fehler bei der Vergabe von Punkte bei Unentschieden drin ist. Das ist aber erstmal sekundär.

    Ich würde mich echt über Hilfe freuen, weil mir abstraktes Vorstellungsvermögen, wie es bei Arrays scheinbar vorhandensein muss, vollkommen abgeht.:-)
    Danke
    Tom

  • #2
    Lass dir mit print_r() testweise deine Arrays ausgeben, dann weißt du, was in denen drinne steht.

    Ich habe keine Ahnung ob jemand von versteht was ich meine
    Ne, nicht wirklich...

    Brich dein Problem mal auf einen einfacheren Sachverhalt runter.

    Irgendwie scheint die Zuordnung der IDs nicht zu stimmen. Bayern München muss doch die ganze Saison über als Mannschaft eine eindeutige ID haben - oder nicht?

    Kommentar


    • #3
      Hallo,

      ich habe ja extra geschrieben, dass ich davon ausging, dass dieser Code hier:

      PHP-Code:
      $ranking[$teams_count->id][0] = $match_count->team_a_id
      $match_count->team_a_id beinhaltet die eindeutige und einmalige ID des jeweiligen Vereins.

      Verrückt ist, dass der Array selbst ganz korrekt nur 18 Einträge laut count() hat. Das stimmt also. Aber inhaltlich scheint alles irgendwie durcheinander zu gehen. Mein Problem hatte ich eigentlich auch aufgezeigt. Die Teams werden am 3. Spieltag 3 mal gelistet, statt nur einmal kumuliert.

      print_r war ja schon drin im Code. Leider sitze ich momentan an einem anderen System.

      Hier mal noch ein Erklärversuch, was in das Array rein soll:

      $ranking[$teams_count->id][0] für die ID des Teams
      $ranking[$teams_count->id][1] für die bisher gewonnenen Spiele
      $ranking[$teams_count->id][2] für die verlorenen Spiele
      $ranking[$teams_count->id][3] für die unentschiedenen Spiele
      $ranking[$teams_count->id][4] für die erzielten tore
      $ranking[$teams_count->id][5] für die bekommenen tore

      So sollte eigentlich ein "Datensatz" für den FCB aussehen
      $ranking[$teams_count->id][0] = 1;
      $ranking[$teams_count->id][1] = 1;
      $ranking[$teams_count->id][2] = 0;
      $ranking[$teams_count->id][3] = 2;
      $ranking[$teams_count->id][4] = 7;
      $ranking[$teams_count->id][5] = 4;

      Wobei, so wie ich es verstehe [$teams_count->id] in dem Fall immer die 1, also die Team_ID vom FCB haben muss.

      Mache ich was falsch, oder verstehe ich das System falsch?
      Danke
      Tom

      Kommentar

      Lädt...
      X