Seite 1 von 2

[geloest] Rangliste erstellen

Verfasst: 07.07.2008 01:32
von TLoD
Huhu Gemeinde :D

ich habe ein kleines Problem bei der Erstellung einer Rangliste.
Ich habe es schon soweit hinbekommen das ich eine Liste erstelle und diese auch richtig nach Anzahl der Scans sortiert wird.

Mein Problem liegt aber daran, das ich absolut nicht weiß, wie ich es anstellen muss, dass auch die Rangzahl ausgegeben wird.

Das ist das aktuelle Script:

Code: Alles auswählen

/*** Rankings ***/
        
        if ($rankings == 1) {
                $sql = "SELECT
                                        ID,
                                        Nick,
                                        IGNick,
                                        RLName,
                                        Feind,
                                        Scans
                     FROM
                        ".SPIELER."
                                WHERE 1
                                       AND Feind = 0
                     ORDER BY
                        Scans DESC;";

                $result = mysql_query($sql) OR die(mysql_error());
                $nicks = array();
                $ids = array();
                $scans = array(); // gibt die Einzelscans des Spielers an
                $eintraege_spieler = 0;
                while($row = mysql_fetch_assoc($result)) {
                        $nicks[] = $row[getDarstellNick($_SESSION['ID'])];
                        $ids[] = $row['ID'];
                        $scans[] = $row['Scans'];
                        $eintraege_spieler++;
                }
                
                // Rankingtabelle erzeugen
                echo "  <h2>Rankings</h2>
                        <table border=\"1\" width=\"40%\">
                                <colgroup>
                                        <col width=\"1*\">
                                        <col width=\"4*\">
                                        <col width=\"1*\">
                                </colgroup>
                                <tr>
                                        <th>Platz</th>
                                        <th>Spieler</th>
                                        <th>Scans</th>
                                </tr>";

                for ($i=0; $i<$eintraege_spieler; $i++) {
                        echo "  <tr>
                                        <td align=\"center\"></td>
                                        <td align=\"center\">".$nicks[$i]."</td>
                                        <td align=\"center\">".$scans[$i]."</td>
                                </tr>";
                }

                echo "</table></body></html>";
        }
Nun fehlt mir nur noch das Zählen der Plätze und ich wäre fertig.
Ich hoffe das mir hier jemand weiterhelfen kann.

Verfasst: 07.07.2008 11:45
von gn#36
Äh einfach echo ($i+1) in der Schleife? Oder in dem Fall besser " . ($i + 1) . " in das bestehende echo einbauen.

Oder was meinst du?

Verfasst: 07.07.2008 11:46
von TLoD
So nun bin ich ein stückchen weiter.

Wenn ich nun $i anzeigen lasse zählt er mir die Einträge hoch, nur habe ich nun das Problem, dass er bei 0 anfängt.
Ändere ich das $i=0 in $i=1 fängt er zwar bei 1 an lässt aber den ersten Platz also den Platz der vorher 0 war weg.

Code: Alles auswählen

for ($i=0; $i<$eintraege_spieler; $i++) { 
                        echo "  <tr> 
                                        <td align=\"center\">".$i."</td> 
                                        <td align=\"center\">".$nicks[$i]."</td> 
                                        <td align=\"center\">".$scans[$i]."</td> 
                                </tr>"; 
                } 

                echo "</table></body></html>"; 
        }

Verfasst: 07.07.2008 11:54
von gn#36
Das habe ich doch gerade oben geschrieben... ($i + 1) ... :roll:

Verfasst: 07.07.2008 11:58
von TLoD
Sry wir haben beide zur selben Zeit gepostet...

Ich habe meine Beitrag noch einmal editiert.
Wenn ich aus $i=0 $i+1 mache, dann zählt er zwar von 1 an hoch aber lässt mir den Platz der vorher 0 war weg.

Verfasst: 07.07.2008 12:05
von TLoD
gn#36 hat geschrieben:Das habe ich doch gerade oben geschrieben... ($i + 1) ... :roll:
Jou funzt ich idiot hatte es eine Zeile höher editiert :roll:

Vielen Dank!

Verfasst: 11.07.2008 00:33
von TLoD
Hallo Ihr,

nun habe ich doch noch mal eine Frage.
Wie könnte ich denn eine Rangliste erstellen, wenn ich als Werte nur ein Datum und einen Nick habe?

Wollt die Abfrage so gestallten wie oben, nur das ich diesmal nach Datum sortiere und dann soll der User mit dem jüngsten Datum den ersten Paltz haben.

Wäre nice wenn mir da jemand nen Tipp geben kann.

Verfasst: 11.07.2008 09:31
von gn#36
Das ist doch ganz einfach umzubauen. Du sortierst in der SQL Abfrage eben nach Datum:

Code: Alles auswählen

SELECT nick, datum FROM tabelle ORDER BY datum DESC LIMIT 0, 100
Das Limit ist dazu da, die Anzahl der Einträge die du erhältst zu begrenzen.

Verfasst: 11.07.2008 09:40
von TLoD
naja ich habe das schon umbegaut, aber ich bekomme egal was ich mache immer eine endlosschleife. der hängt mir dann tausende tabellen einträge dran.

ich werd das etz mal mit dem limit testen evtl war das mein fehler ;)

schon mal vielen dank!

Verfasst: 11.07.2008 10:34
von gn#36
Kann denn eine Nick mehrfach in der Tabelle auftreten? Da das Datum vermutlich nicht wichtig ist könntest du dann zum Beispiel mit DISTINCT arbeiten.

Code: Alles auswählen

SELECT DISTINCT nick FROM tabelle ORDER BY datum DESC LIMIT 0,100