Rangliste aber wie?

langames sind geil

Grünschnabel
Hi,
ich weiss ich bin neu hier, habe aber schon jetzt eine Frage:
Ich bin dabei ein Browsergame zu programmieren und wollte fragen wie die Tabelle in MySQL für eine Rangliste aussehen muss und wie ich den Script für die Rangliste schreiben sollte.
Fakten zu dem Spiel: man kann sein Dorf ausbauen und dies bringt Einwohner. Nun wollte ich dass die Rangliste so ausieht dass derjenige mit den meisten Einwohnern ganz oben steht usw.
Wer wirklich weiss wie man dies macht der sol mir eine PN schicken und ich gib ihm die addy damit er sich ein richtiges Bild davon machen kann...
Lg
PS: Ich habe nichts nennenswertes mit der Suchfunktion gefunden^^
 
Ich würd mal sagen einfach in ner SQL-Datenbank für jeden User einen Datensatz erstellen. In der Tabelle eine Spalte machen wo du die Punkte der Spieler drin hast. Dann einfach die Datensätze geordnet nach der Grösse des Punktewerts ausgeben lassen...
Ich versteh nicht besonders viel davon, also wenn ich was falsches gesagt habe müsst ihr mich korrigieren.. Aber denke doch dass es so klappen sollte..

mfg frankenstein
 
Funktion sort() für aufsteigende Sortierung,
Funktion rsort() für absteigende Sortierung,
SORT_NUMERIC für Sortierung nach Zahlenwerten

Also z.B. sort($Werte,SORT_NUMERIC)

glaub ich zumindest ;-)
 
Ich hänge da auch grad an sonnem Thema! Die Frage welche sich hier stellt ist ja net die Sortierung, da man dies per ORDER BY macht, sondern eher die Frage - wo holt man die entsprechenden IDs bzw. Platzierungen her!

Ich habe da grad mal was gecodet, ist noch net getestet, nur ne erste Idee!

PHP:
<?php

$sql="SELECT `uname` FROM `user` ORDER BY `punkte`";
$abfrage = mysqli_query($verbindung, $sql);
		
//Überschrift oder Image
		echo"Überschrift<br><br>";
		$color = "#b8860b";
		$i=0;	
			while($rang = mysqli_fetch_assoc($abfrage))
			{
			
			//Ausgabe
			echo"'".$i++."'<font color='".$color."'>".$rang['uname']."\n</font>";
			}

?>

Ich bin mir zwar ziemlich sicher, dass es über den Imkrementator nicht funktioniert aber habe es wie gesagt noch net getestet! Wenn jemand ne bessere Lösung oder gar scho Erfahrungen mit diesem Thema hat, immer her damit;)
 
Habe den obigen Code mal so verändert:

PHP:
<?php
include("header.php");

$sql="SELECT * FROM `user` ORDER BY punkte DESC";
$abfrage = mysqli_query($verbindung, $sql);
		
//Überschrift oder Image
		echo"Überschrift<br><br>";
		$color = "#b8860b";
		$i=0;	
			while($i <= ($rang = mysqli_fetch_assoc($abfrage)))
			{
			
			//Ausgabe
			echo"".($i+1)."&nbsp<font color='".$color."'>".$rang['uname']."</font>";
			echo"<br>";
			$i++;
			}
			
			
include("footer.php");

?>

Die Ausgabe ****t, nur werden halt alle Positionen nacheinander ausgegeben! Es werden doppelte oder gleiche Punktzahlen net berücksichtigt!
 
Was bekommst du denn für eine Ausgabe aus deiner SQL Abfrage im Allgemeinen?

Also ich glaub, im zweiten ist deine While-Anweisung einfach falsch gewählt, es reicht wenn du
PHP:
while($rang = mysql_fetch_assoc($abfrage)) {
    //[...]
}

Ich glaub, bin leider etwas müde und deswegen nicht mehr zu 100% auf der höhe, dass du bei deinem ersten Code nur die Anweisung beim Order vergessen hast (DESC).

Ich selber programmiere leider immer ohne Improved Extension und habe deswegen die Datenbankabfrage etwas anders strukturiert und bei mir ging es.
PHP:
<?php
$sql="SELECT user FROM user ORDER BY punkte DESC";
$abfrage = mysql_query($sql);
        
//Überschrift oder Image
        echo"Überschrift<br><br>";
        $color = "#b8860b";
        $i=0;    
            while($rang = mysql_fetch_assoc($abfrage))
            {
            
            //Ausgabe
            echo"'".$i++."'<font color='".$color."'>".$rang['user']."\n</font>";
            }

?>
 
Zuletzt bearbeitet:
So ich habe hier im Forum noch was gefunden, dass ich nutzen konnte! Habe den Code an einigen Stellen abgeändert:

PHP:
<?php
include("header.php");

$sql="SELECT * FROM `user` ORDER BY `punkte` DESC";
$abfrage = mysqli_query($verbindung, $sql);
		
//Überschrift oder Image
		echo"Überschrift<br><br>";
		$color = "#b8860b";
		$rang=0;	
     	while ($row = mysqli_fetch_array($abfrage)){
			if($row['punkte'] != $punkte) {
   			$rang++;
			}
			$punkte = $row['punkte'];  

            echo"".$rang."&nbsp<font color='".$color."'>".$row['uname']." ".$row['punkte']."</font>";
            echo"<br>";
    }
    include("footer.php");
?>

Das funktioniert auch schon "fast"! Jetz habe ich folgendes Problem:

Es wird sortiert, aber noch verkehrt! wenn ich in der DB

User A mit 2 Punkten
User B mit 2345 Punkten
User C mit 4 Punkten

steht bei der Ausgabe User C vor User B!

http://www.musicworld4all.com/rangs.php
 
Zurück