Gesamtwertung ?

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

  • Gesamtwertung ?

    Hallo !

    Ich habe ein Problem bei einen Projekt von mir. Ich habe jetzt den Script eigentlich fertig da fällt mir auf ich habe gar keine Gesamtwertung eingebaut. Dies macht mir enorme Probleme. Zur Erklärung. Ich habe ein Hotlap (Schnelle Runden) System programmiert wo man sich Registrieren kann und dann Runden zu jeder Zeit (egal wann) auf jeden der 17 original F1 Kurse hochladen kann. Wie gesagt zu jeder Zeit es gibt keine Zeiträume für 1 Strecke. (gerade dies macht mir Probleme). Dies ist meine Tabellen Struktur:

    Tabelle 1: Members (Spalten: ID, Benutzername, Kennwort, Email, icq, gebdatum, herkunft, erfolge, Registierungszeit, Registierungsdatum, interessen, rang (zum unterscheiden von Admins, Prüfer und Usern).

    Tabelle 2: new_hotlaps , da kommen die Runden bevor sie überprüft werden rein (Spalten: ID, Benutzername, Kennwort, track, timem, times, timez, split1m, split1s, split1z, split2m, split2s, split2z, file, datum (m steht für Minuten, s für Sekunden und z für Zehntel, dadurch kann ich die Runden besser in den Output auflisten).

    Tabelle 3: hotlaps , da kommen überprüfte Runden rein (Spalten s.H. Tabelle 2)

    Ja das waren die Tabellen, ich würde wenn nötig auch neue Spalten adden wie z.B. Punkte oder Platzierung. Sogar eine neue Tabelle wäre kein Problem. Ich möchte halt jetzt erreichen damit ich einen Output hinbekomme der nach einen bestimmten Punktesystem (z.B. durch Variablen in der Seite oben) diese Verteilt (für jede Strecke einzeln) und dann diese zusammenzählt. Insgesammt soll dann halt eine Tabelle mit der Gesamtwertung rauskommen z.B.:
    1.Martin 100 Punkte
    2.Michael 75 Punkte

    Wäre das möglich ? Ich denke schon, also wenn mir jemand helfen kann dann büddeeeee. Ich würde ihn auch gerne im Impressum oder so auf der Page des Scripts (http://www.gpxhotlaps.de/beta) erwähnen. An der .de Domain sieht man auch dass das System nicht nur so nebenbei als Spaß programmiert wird, also büddee hilfe .

  • #2
    kein Problem:
    PHP-Code:
    $res mysql_query('select * from hotlaps');
    $apunkte = array();
    while (
    $x mysql_fetch_assoc($res))
    {
      
    // hier die Punkteberechnung
      
    $punkte = ...;
      
    // Punkte zum entsprechenden Namen addieren
      
    $apunkte[$x['Benutzername']] += $punkte;
    }
    // Array nach Punkten absteigend sortieren ...
    arsort($apunkte);
    // ... und ausgeben:
    $p=0;
    foreach(
    $apunkte as $name=>$punkte)
      echo ++
    $p". $name $punkte Punkte<br>"
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar


    • #3
      vielen und lieben dank !

      Hmm ich nerve nochmal sorry...

      Habe das Problem das ich jetzt ja für jede Runde z.B. 20 Punkte geben kann. Ich würde aber gerne
      für die ersten 10 schnellsten Zeiten auf jeder Strecke Punkte für geben. Es gibt da ja die möglichkeit
      die MySQL! DB Abrfage z.B. auf die ersten 10 schnellsten Zeiten auf einer Strecke zu filtern und das dann
      halt für alle 17 Strecken zumachen (unter einander halt immer ne neue DB Abfrage starten). Nur weiss ich nicht wie machen kann das dann die 2. schnellste Zeit nur
      noch z.B. 17 statt 20 Punkte bekommt. Kannst du oder jemand anders mir da nochmal helfen ? Ich glaube man müsste dann das so programmieren das er ab den 2. Datensatz 3 Punkte abzieht, weiss aber nicht wie ich das genau mache...
      Zuletzt geändert von GeoffRowleyX; 22.10.2002, 23:07.

      Kommentar


      • #4
        Wenn du bei 20 Punkten anfängst und jedes Mal drei Punkte abziehst, brauchst du nur die sieben besten Zeiten ... sonst kriegt der achte -1 Punkt.
        PHP-Code:
        $apunkte = array();
        for(
        $strecke=1$strecke<18$strecke++)
        {
          
        $res mysql_query("select * from hotlaps
            where track=
        $strecke
            order by timem desc, times desc, timez desc
            limit 0,7"
          
        );
          for(
        $punkte=20$x=mysql_fetch_assoc($res); $punkte-=3)
            
        $apunkte[$x['Benutzername']] += $punkte;

        Du kannst natürlich auch ein flexibleres Punktesystem benutzen ... dann musst du nur zu Anfang per Array die Punkte für jeden Platz vergeben und anschließend das Array abgrasen:
        PHP-Code:
        $apunkte = array();
        $spunkte = array(20,17,15,13,10,8,6,4,2,1);
        $anzahl count($spunkte);
        for(
        $strecke=1$strecke<18$strecke++)
        {
          
        $res mysql_query("select * from hotlaps
            where track=
        $strecke
            order by timem desc, times desc, timez desc
            limit 0,
        $anzahl"
          
        );
          for(
        $platz=0$x=mysql_fetch_assoc($res); $platz++)
            
        $apunkte[$x['Benutzername']] += $spunkte[$platz];

        Wenn du dann noch willst, dass für gleiche Zeiten auch gleiche Punkte vergeben werden, wird das ganze noch etwas aufwändiger.
        mein Sport: mein Frühstück: meine Arbeit:

        Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

        Kommentar


        • #5
          Ja also das mit den gleichen Zeiten ist egal weil es höhst unwahrscheinlich ist... Aber ich habe nun folgenden Code zusammen gesetzt und bekomme leider garkeine Ausgabe, in der DB gibt es aber 2 Datensätze mit den track Namen "Australien/Melbourne". Muss man vielleicht die Ausgabe im Gegensatz zum 1. Versuch ändern ? Sorry aber in diesen Teilgebiet habe ich fast 0 Plan :-/.

          PHP-Code:
          <?
          include ('config3.php');
          $verbindung = mysql_connect($MySQL_HOST,$MySQL_USER,$MySQL_PASSWORT) or die (mysql_error());
          mysql_select_db($MySQL_DB);
          $apunkte = array();
          $strecke = 'Australien/Melbourne';
          for($strecke = 1; $strecke<17; $strecke++)
          {
            $res = mysql_query("select * from hotlaps
              where track = $strecke
              order by timem desc, times desc, timez desc
              limit 0,7"
            );
            for($punkte=20; $x=mysql_fetch_assoc($res); $punkte-=3)
              $apunkte[$x['Benutzername']] += $punkte;
          }
          // Array nach Punkten absteigend sortieren ...
          arsort($apunkte);
          // ... und ausgeben:
          $p=0;
          foreach($apunkte as $name=>$punkte)
            echo ++$p, ". $name $punkte Punkte<br>";
          ?>

          Kommentar


          • #6
            Ich war davon ausgegangen, dass die Strecken durchnummeriert sind ...
            sonst musst du ein Array $strecken = array(...) mit den Streckennamen anlegen und dann mit foreach ($strecken as $strecke) durchwandern.
            mein Sport: mein Frühstück: meine Arbeit:

            Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

            Kommentar

            Lädt...
            X