[geloest] Rangliste erstellen

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Benutzeravatar
TLoD
Mitglied
Beiträge: 161
Registriert: 04.08.2007 14:57
Wohnort: Nürnberg
Kontaktdaten:

[geloest] Rangliste erstellen

Beitrag 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.
Zuletzt geändert von TLoD am 14.07.2008 00:03, insgesamt 3-mal geändert.
LG Marc

Wir leben alle unter dem gleichen Himmel, aber wir haben nicht alle den gleichen Horizont.
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag 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?
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Benutzeravatar
TLoD
Mitglied
Beiträge: 161
Registriert: 04.08.2007 14:57
Wohnort: Nürnberg
Kontaktdaten:

Beitrag 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>"; 
        }
Zuletzt geändert von TLoD am 07.07.2008 11:56, insgesamt 1-mal geändert.
LG Marc

Wir leben alle unter dem gleichen Himmel, aber wir haben nicht alle den gleichen Horizont.
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Das habe ich doch gerade oben geschrieben... ($i + 1) ... :roll:
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Benutzeravatar
TLoD
Mitglied
Beiträge: 161
Registriert: 04.08.2007 14:57
Wohnort: Nürnberg
Kontaktdaten:

Beitrag 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.
LG Marc

Wir leben alle unter dem gleichen Himmel, aber wir haben nicht alle den gleichen Horizont.
Benutzeravatar
TLoD
Mitglied
Beiträge: 161
Registriert: 04.08.2007 14:57
Wohnort: Nürnberg
Kontaktdaten:

Beitrag 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!
LG Marc

Wir leben alle unter dem gleichen Himmel, aber wir haben nicht alle den gleichen Horizont.
Benutzeravatar
TLoD
Mitglied
Beiträge: 161
Registriert: 04.08.2007 14:57
Wohnort: Nürnberg
Kontaktdaten:

Beitrag 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.
LG Marc

Wir leben alle unter dem gleichen Himmel, aber wir haben nicht alle den gleichen Horizont.
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag 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.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Benutzeravatar
TLoD
Mitglied
Beiträge: 161
Registriert: 04.08.2007 14:57
Wohnort: Nürnberg
Kontaktdaten:

Beitrag 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!
LG Marc

Wir leben alle unter dem gleichen Himmel, aber wir haben nicht alle den gleichen Horizont.
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag 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
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Antworten

Zurück zu „Coding & Technik“