Salut
Pour un jeux en ligne je doit réaliser des classements des joueurs (plus de 50 000). Jusqu'a présent les classements sont calculés en temps réel si ils ont besoin d'etre affiché.
Si c'est pour afficher le classement d'une seule personne, cela ne pose pas de probleme, par contre pour afficher la page de classent de tous les joueurs (100 par pages), la page met plus d'une 10aine de seconde avant de s'afficher.
J'aimerai donc changer le systeme de calcul des classement pour les calculer par exemple toutes les heures ou toutes les nuit dans un rcon.
J'ai donc rajouter un champ "rank" ou je metrais le cassement à jour à chaque calcul.
Par contre le calcul pour mes 50 000 entrées est tres long : environ 90 minutes.
Je voudrais savoir si vous savais comment optimiser le truc ou si il existe d'autres méthodes pour accelerer le truc ?
voila mon script de mise à jour :
(les classement se font par nombre de points, si le nome de point de 2 joueurs sont identique, alors c'est le nombre de victoire qui départagera, et si les victoires sont elle aussi identique alors ce sera celui qui aura le moins de defaite qui sera devant)
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 $crankq = mysql_query("SELECT * FROM `table`"); while ($crank = mysql_fetch_array($crankq)){ // Calcul du rank $rankdq = mysql_query("SELECT COUNT(*) as `rank` FROM `table` WHERE (`points`>".$crank['points'].") OR ((`points`=".$crank['points'].") AND (`victoire`>".$crank['victoire'].")) OR ((`points`=".$crank['points'].") AND (`victoire`=".$crank['victoire'].") AND (`defaite`<".$crank['defaite']."))"); $rankd = mysql_fetch_array($rankdq); $rank = $rankd['rank'] + 1; mysql_query("UPDATE `table` SET `rank`=".$rank." WHERE `id`=".$crank['id']); }
Partager