automatisches Ranglisten-Script

JustNobody

Grünschnabel
abend,

ich arbeite grad an einem kleinen browsergame, und damit man auch weiß, wo man steht, braucht das ganze ein ranglisten-script.

damit die rangliste nicht immer in der DB geändert wird, wenn ein user die rangliste ansieht, müsste das alles per cronjob gehen.

d.h. in der mysql tabelle sind in einer spalte die punkte. nach denen soll das geordnet werden, und dann das ergebnis wieder in die db geschrieben werden.

das script sollte ungefähr so aussehn:

aufruf -> daten aus der db lesen (nick, punkte) -> ordnen -> wieder in die db einfügen (nick mit n punkten auf rang x...)

gibts sowas schon in ähnlicher form irgendwo, bzw ist mein ansatz richtig und könnte mir da eventuell jemand ein paar zeilen code geben?

danke

mfg stephan
 
Netiquette §12 <- Betrifft die deutsche Rechtschreibung

Hast du denn einen eigenen Server bzw. die Möglichkeit Cronjobs einzurichten?

Du schreibst ein Browsergame?
Browsergames arbeiten für gewöhnlich sher Datenbanklasteig...
...wieso kannst du denn dann kein simples auslesen -> einfügen Script basteln?
 
an sich gesehen wird sich in der Db immer etwas ändern, denn die Ranglisten richten sich ja nach gewissen werten, welche sich immer ändern müssen, denn sonst kommt keine ranglist zustande.
In diesem Fall brauchst du keine crownjobs, denn immer wenn ein User die statistiken ansieht wird ja ein script aufgerufen auf der Seite, welche alle werte ausliest und dan musst du sie in dem SQL-Query nur sortieren wie du es haben möchtest.

Die Rangliste ändert sich immer auch in dem Fall wenn ein Spieler ein Zug gemacht hat und Punkte (oder was sonst als Bewertungskriterium gilt) bekommt und dies in der Datenbank gut geschrieben wird.

nun kommt es nur darauf an, ob die Rangliste immer wieder neu berechnet werden soll aus den Werten die in der DB gelesen werden oder ob bei jedem Zug, bei dem es Punkte gab eine Formel vor dem updaten der DB die Rangliste ausrechnet und diesen rang ebenfalls updatet.
Aber prinzip ist an sich das gleiche.
 
Ich habe irgendwo noch einen Ansatz von einem Browsergame rumliegen,
hab das per Cronjob alle 15 Minuten aufgerufen um die Punkte zu berechnen, da bei größeren zeitabständen die Wartezeiten für die Spieler zu lange werden wenn ejdes mal die Punkte usw. berechnet werden.

Genauso sieht das mit einer Rangliste aus, wenn du ein Spiel mit 3000 Spielern hast und alle paar Sekunden die Rangliste neu generiert werden muss ist das extrem Datenbanklastig und kann vermieden werden, indem die Rangliste z.B. alle 15 Minuten per Cronjob aktualisiert wird.
 
danke erstmal für die raschen antworten.

die voraussetzungen für cronjobs hätte ich. aber ich werds wohl über die "generate-by-load" methode machen.

z.Z. hab ich folgenden code:

PHP:
<?PHP
$rang = "1";
$db->query("SELECT * FROM gamedata ORDER BY punkte DESC");
while($datensatz = $db->data()) {
echo("<tr><td> ".$rang++." </td>");
echo("<td> ".$datensatz['id_x'].":" .$datensatz['id_y']." </td>");
echo("<td> ".$datensatz['nick']." </td>");
echo("<td> ".$datensatz['asteroiden']." </td>");
echo("<td> ".$datensatz['punkte'] ."</td></tr>");
?>
</table>
<?PHP
}
?>

aber ich hab keine ahnung, wie ich den rang wieder zurück in die DB schreibe.

mfg
stephan
 
Zuletzt bearbeitet:
Im Prinzip musst du die Punkte ja garnicht in die Datenbank einfügen, es reicht doch schon, wenn du es berechnest, bevor du es ausgibst/damit arbeiten willst.

Den Rang musst du auch nicht in die Datenbank schreiben, da der Wert immer dynamisch hochgezählt wird.
 
naja, am anfag der seite ist eine kleine übersicht, in der u.a. auch der rang aufscheint. deshalb möchte ich den rang wieder in die db schreiben

mfg
stephan
 
Den kannst du doch auch dort errechnen...

Geht denke ich mal schneller, als die ganzen Datenbank Abfragen und Aktualisierungen, auch wenn es sich hierbei nur um unwesentliche Zeitunterschiede handelt.
 
schönen nachmittag allen,


ich hab mir gestern noch lange den kopf über das berechnen des platzes zerbrochen. doch ich bin irgendwie zu keiner brauchbaren lösung gekommen.

könnte mir da eventuell jemand einen kleinen denkanstoß geben?

danke

mfg
stephan
 
Netiquette §12 - Deutsche Rechtschreibung - Danke!

Berechnung des Platzes? Oder der Punkte?
Welche Faktoren möchtest du denn verwenden?
 
Zurück