Platzierung bei Rangliste

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

  • Platzierung bei Rangliste

    Hallo!

    Ich mache ein Bundesligatippspiel, wo es natürlich auch eine Rangliste gibt. Diese habe ich auch schon erstellen lassen, alles funktioniert bestens, bis auf eine Ausnahme.

    Wenn mehrere User gleich viele Punkte haben, dann sollten alle den gleichen Rang vor ihrem Namen haben.

    Bsp:

    Aktuell:
    1. Fritz 10
    2. Walter 9
    3. Josef 9
    4. Michael 9
    5. Matthias 8
    ...

    Wunsch:
    1. Fritz 10
    2. Walter 9
    2. Josef 9
    2. Michael 9
    5. Matthias 8
    ...

    Wie kann ich das machen?

    MfG
    Jaqui

  • #2
    ... indem du VOR der rangvergabe prüfst, was der vorherige an punkten hatte.
    am besten benutzt du mal die suche nach "rangliste" oder "gruppenwechsel"
    Kissolino.com

    Kommentar


    • #3
      ungefähr so:

      if punktenächsterinliste != punkteaktuellerinliste {
      listenzaehler++;
      }

      d.h. der zähler für die platzierung wird nur erhöht, wenn der nächste spieler in der liste ungleich viele punkte hat wie der aktuelle...

      CUC

      Kommentar


      • #4
        d.h. der zähler für die platzierung wird nur erhöht, wenn der nächste spieler in der liste ungleich viele punkte hat wie der aktuelle...
        wenn es zwei erste plätze gab, ist der nächstfolgende der dritte!
        Die Zeit hat ihre Kinder längst gefressen

        Kommentar


        • #5
          Erstmal danke für die Antworten.

          Momentan sieht mein Code so aus:

          PHP-Code:
              <?
               $rang = 0;
               $query = mysql_query("SELECT Username, Punkte FROM User ORDER BY Punkte DESC");
               while ($row = mysql_fetch_array($query)){
               if ($row['Punkte'] == $punkte) {
                $rang=$rang;
               }
               else {
                $rang++;
               }
              ?>
               <tr>
                <td width="50" valign="top">
                 <? echo $rang; ?>
                </td>
                <td width="190">
                 <? echo $row['Username']; ?>
                </td>
                <td width="60" align="right" valign="bottom">
                 <? echo $row['Punkte']; ?>
                </td>
               </tr>
              <? 
               $punkte=$row['Punkte'];
              }
              ?>
          Ich bin eigentlich überzeugt, dass es so funktionieren müsste. Tut es aber nicht. Weiss jemand, wo der Fehler liegt?

          MFG
          Jaqui
          Zuletzt geändert von Jaqui; 22.09.2004, 08:54.

          Kommentar


          • #6
            Original geschrieben von Jaqui
            Weiss jemand, wo der Fehler liegt?
            bei deiner "tollen" fehlerbeschreibung ...?
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Original geschrieben von Jaqui
              Tut es aber nicht.
              was heisst es genau?

              Kommentar


              • #8
                Ich habe den Code jetzt nochmals geändert, siehe oben.

                Jetzt sieht die Rangliste so aus:

                1 Fritz 10
                2 Walter 9
                2 Josef 9
                2 Michael 9
                3 Matthias 8

                Nun sollte Matthias aber auf Rang 5 statt auf Rang 3 liegen... Falls mir jemand Tipps hat, wie das zu machen ist, wäre ich dankbar.

                MFG
                Jaqui

                Kommentar


                • #9
                  dann inkrementiere eine separate $var bei jedem durchlauf, setzt sie wieder zu 0, wenn der rang sich ändert und addiere aber zu $rang, bevor du sie zu 0 setzst
                  Zuletzt geändert von asp2php; 22.09.2004, 09:05.

                  Kommentar


                  • #10
                    Nun sollte Matthias aber auf Rang 5 statt auf Rang 3 liegen...
                    das er immer noch dritter ist, ist doch wohl logisch - du zählst ja $rang nur in dem moment um eins hoch, wo der punktestand sich ändert.
                    du musst aber irgendwie auch mitzählen, wie viele user mit dem gleichen punktestand es gibt ...

                    vielleicht so in etwa:
                    PHP-Code:
                    $zaehler 0;
                    // [...]
                    while ($row mysql_fetch_array($query)){
                       if (
                    $row['Punkte'] == $punkte) {
                          
                    $zaehler++;
                       }
                       else {
                          
                    $rang += $zaehler;
                          
                    $zaehler 0;
                       }
                    // [...] 
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      OK, danke für eure Hilfe und für eure Geduld. Ich bin halt erst bei den Grundschritten lernen...

                      Der Code sieht jetzt wie folgt aus:

                      PHP-Code:
                          <?
                           $rang = 0;
                           $rangtemp=0;
                           $query = mysql_query("SELECT Username, Punkte FROM User ORDER BY Punkte DESC");
                           while ($row = mysql_fetch_array($query)){
                           if ($row['Punkte'] == $punkte) {
                            $rang=$rang;
                            $rangtemp++;
                           }
                           else {
                            $rang=$rang+$rangtemp;
                            $rang++;
                           }
                          ?>
                           <tr>
                            <td width="50" valign="top">
                             <? echo $rang; ?>
                            </td>
                            <td width="190">
                             <? echo $row['Username']; ?>
                            </td>
                            <td width="60" align="right" valign="bottom">
                             <? echo $row['Punkte']; ?>
                            </td>
                           </tr>
                          <? 
                           $punkte=$row['Punkte'];
                          }
                      Und er funktioniert damit wie er sollte.

                      Danke nochmals.

                      MfG
                      Jaqui

                      Kommentar

                      Lädt...
                      X