JeuWeb - Crée ton jeu par navigateur
Classements des joueurs - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Classements des joueurs (/showthread.php?tid=5087)

Pages : 1 2 3 4 5 6 7


RE: classements des joueurs - zeppelin - 19-08-2010

php_addict, la je ne comprends pas... tu as la solution la plus optimisé toute faite qui est mise à disposition, mais tu t'obstinne à ne pas l'utiliser.... dois-je comprendre que tu n'as pas compris? Comme je te l'ai dis, je veux bien t'aider à le mettre en place, mais il faut y mettre du tiens également Undecided

Le temps de calcul avec la solution que j'ai proposé doit être inférieur à 10MS, et la taille n'a que peu d'influence (tant que ça reste dans le raisonnable...), si en plus tu cache le résultat comme te le propose sephi... que du bonheur :-)

Franchement pense z'y (comment ça s'écrit au juste? ^^), c'est un principe de mysql méconnu mais au combien puissant (requête imbriqué, sortir un classement uniquement sur les points sans colonne de classement)!

Si tu veux je suis dispo par MP pour mettre ça en place sur ton jeu.

Allez ++, bonne soirée tout le monde, la bière m'appelle :-p


RE: classements des joueurs - Foxglove - 19-08-2010

(19-08-2010, 08:43 PM)php_addict a écrit : 2 ) je trie (en php, pas avec sql) l'array $joueur selon points attaque

Ce n'est pas très efficace de retrier ton tableau à chaque fois que le classement change. En plus, ça ne tire pas vraiment profit de la manière dont PHP trie les données. C'est plus rapide de seulement mettre à jour la position du joueur concerné dans le tableau trié.

(19-08-2010, 08:43 PM)php_addict a écrit : c'est l'écriture de la table classement qui prend du temps (accès disque dur...)

Pourquoi sauvegarder les classements dans une base de données ? Tu pourrais juste conserver les classements en mémoire. Tu n'as pas besoin de notion de persistance puisque tu peux la recalculer à chaque redémarrage du jeu, non ? C'est peut-être pas l'optique PHP par contre, je ne sais pas trop.


RE: classements des joueurs - php_addict - 19-08-2010

(19-08-2010, 09:15 PM)zeppelin a écrit : php_addict, la je ne comprends pas... tu as la solution la plus optimisé toute faite qui est mise à disposition, mais tu t'obstinne à ne pas l'utiliser.... dois-je comprendre que tu n'as pas compris? Comme je te l'ai dis, je veux bien t'aider à le mettre en place, mais il faut y mettre du tiens également Undecided

je vais rejeter un coup d'oeil plus attentif à ton post, désolé...


RE: classements des joueurs - Jabberwock - 19-08-2010

(19-08-2010, 01:42 PM)zeppelin a écrit : Donc pas besoin de between et je ne sais trop quoi, mais juste une seule petite requête imbriqué (celle de ma fonction) Undecided
Vexé ! non je déc Wink mais j'ai du quand même mal m'exprimer.

(19-08-2010, 01:42 PM)zeppelin a écrit : $request = 'SELECT uid FROM `ranglist` WHERE '. $points . ' >= ( SELECT '. $points .' FROM `ranglist` WHERE uid ='. $uid .' ) order by uid desc';

je montre la requête que je décrivais qui remplacerais celle ci dessus.

Code PHP :
<?php 
$points_max
= 99999999; // c'est moche ça par contre --'
$requete = mysql_query("SELECT COUNT(*) AS classement_pts WHERE points BETWEEN ".$points_du_joueur." AND ".$points_max."");
$reponse = mysql_fetch_array($requete);

echo
$reponse['classement_pts'];

// En bref cette requête compte le nombre de ligne compris entre le maximum de points et les points du joueur

Ma requête n'est-elle pas plus rapide ?


RE: classements des joueurs - Thib4s - 19-08-2010

Le probleme n'est pas souvent la rapidité de la requete mais d'essayer de les limiter au maximum pour epargner de la charge au serveur ;P


RE: classements des joueurs - php_addict - 20-08-2010

bonjour.

merci à vous tous, mais je reviens sur un dernier point si vous le voulez bien:

Code PHP :
<?php 
function getRankingById($joueur_id, $type_de_points,$connexion_mmorpg)
{
$result=$connexion_mmorpg->query("SELECT COUNT(joueur_id) FROM classement WHERE $type_de_points >= ( SELECT $type_de_points FROM classement WHERE id = $joueur_id ) order by joueur_id desc ");
$num_rows=$result->fetchColumn();
return
$num_rows;
}

$start=getRankingById($joueur_id, $type_de_points,$connexion_mmorpg)-1;
$result=$connexion_mmorpg->query("SELECT id FROM classement ORDER BY total DESC LIMIT $start , 20");

$donnees = $result->fetchAll(PDO::FETCH_ASSOC);

cela fontionne à merveille, cependant il y a comme un hic quand le joueur n'a pas de points (ZERO) exemple:

[Image: classemente.jpg]

Code PHP :
<?php 
$joueur_id
=4;
$start=getRankingById($joueur_id, 'total',$connexion_mmorpg)-1;
$result=$connexion_mmorpg->query("SELECT id FROM classement ORDER BY total DESC LIMIT $start , 3");

c'est certainement du au fait que la fonction getRankingById() me renvois le nombre d'enregistrement > ou = à ZERO (c'est à dire tout les enregistrements)


RE: classements des joueurs - Ter Rowan - 20-08-2010

effectivement ( ben joué le cas test :p) il vau mieux faire un

count(*)+1 where score strictement supérieur à score du joueur


au delà de ce point tu obtiens le résultat en combien de temps ?


RE: classements des joueurs - php_addict - 20-08-2010

(20-08-2010, 01:46 PM)Ter Rowan a écrit : il vau mieux faire un
count(*)+1 where score strictement supérieur à score du joueur

ceci ne fonctionne pas non plus ;(

Code PHP :
<?php 
function getRankingById($joueur_id, $type_de_points,$connexion_mmorpg)
{
$result=$connexion_mmorpg->query("SELECT COUNT(joueur_id)+1 FROM classement WHERE $type_de_points > ( SELECT $type_de_points FROM classement WHERE id = $joueur_id ) order by joueur_id desc ");
$num_rows=$result->fetchColumn();
return
$num_rows;
}



RE: classements des joueurs - Ter Rowan - 20-08-2010

ça fonctionne pas ça plante ou ça fonctionne pas ça donne un mauvais résultat (etlequel) ?


RE: classements des joueurs - php_addict - 20-08-2010

(20-08-2010, 02:26 PM)Ter Rowan a écrit : ça fonctionne pas ça plante ou ça fonctionne pas ça donne un mauvais résultat (etlequel) ?

j'ai mis tout les scores à zero pour pousser + avant l'etude de cas...

et la fonction getRankingById() me renvois 1