JeuWeb - Crée ton jeu par navigateur
requête mysql - classement - 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 : requête mysql - classement (/showthread.php?tid=2658)

Pages : 1 2


requête mysql - classement - zeppelin - 07-06-2008

Bonjour tout le monde!

Voilà j'ai une question simple concernant une requête sql. J'ai dans la table "ranglist" pour chaque joueur son nombre de points off, nombre de points def, ainsi que l'ensemble des deux (global).

Maintenant je veux savoir combientième le joueur XXX est. Dois-je lancer une boucle qui incrémente de 1 jusqu'à trouver le bon joueur ou y a il un moyen plus sophistiqué? Je me refuse de croire que c'est l'unique solution :-S

Exemple avec 5 joueurs:

joueur1 -> 200 points off
joueur2 -> 300 points off
joueur3 -> 400 points off
joueur4 -> 500 points off
joueur5 -> 100 points off

Comment je peux savoir combientième joueur 3 est classé??

Merci beaucoup!!


RE: requête mysql - classement - Anthor - 07-06-2008

Code PHP :
<?php 
SELECT COUNT
( id ) AS nbr
FROM
`joueurs`
WHERE points >= (
SELECT points
FROM
`joueurs`
WHERE id = 3
)



RE: requête mysql - classement - Yoda54 - 08-06-2008

Quelle différence y a-t-il si on n'utilise pas ANY puisque le SELECT ne renvoie qu'une seule valeur?

Je précise, j'ai découvert ANY en voyant cette réponse et pour ce que j'ai pu comprendre de la doc, c'est utile lorsque le SELECT renvoie plusieurs valeurs.


RE: requête mysql - classement - Anthor - 08-06-2008

Aucune différence Smile


RE: requête mysql - classement - Yoda54 - 08-06-2008

J'ai du comprendre ce que j'ai lu dans la doc alors Smile
Merci.

P.S.: tu aurais pu laisser le ANY, s'il n'est pas utile dans la requête présente, il permet d'en découvrir plus.


RE: requête mysql - classement - Anthor - 08-06-2008

Les sous-requêtes c'est déjà une bonne découverte :p


RE: requête mysql - classement - zeppelin - 19-06-2008

Oui moi je ne connaissais pas du tout, donc je n'ai pas pu lancer de recherches efficace sur google. :-(

En tout cas un grand merci, ça fonctionne!

Une autre question qui concerne aussi le tri, mais cette fois dans un array.

J'ai un tableau qui recense l'expérience qu'un héros à besoin pour passer au niveau suivant, donc plus ou moins comme ça (chez moi c'est un logarythm qui incrémente).

$level("pour sauter le niv. 0", 200, 500, 1200, 3400, 5000, 7000);

Maintenant mon héros a 800 points d'expérience. Comment savoir de quel niveau il est? Dans notre cas ceci devrait afficher niv.2, car plus grand que 500 mais plus petit que 1200!

J'ai cherché avec array_search, mais aucune solution convaincante... Et encore une fois, je me refuse de croire que je dois lancer une boucle pour si peu! :non:

Un grand merci d'avance!!


RE: requête mysql - classement - Anthor - 19-06-2008

Code PHP :
<?php
$array_level
= array( 0, 200, 500, 1200, 3400, 5000, 7000 );
$myXP = 800;

$level = end(
array_keys(
array_filter(
$array_level,
create_function('$a', 'return $a < '.$myXP.';')
)
)
);
// Return 2
echo $level;
?>

Berk, mais de bonnes choses à apprendre Smile


RE: requête mysql - classement - zeppelin - 20-06-2008

euh... oki, ça fonctionne! Mais je n'aurais jamais trouvé seul, un grand merci! ^^ je vais analyser tout ça! Chapeau à toi, vraiment un programmeur hors du commun je vois ;-)


RE: requête mysql - classement - Anthor - 20-06-2008

Y'a bien mieux je pense, mais c'est plus sympa d'apprendre des choses avec.

Globalement array_filter supprime de $array_level toutes les entrées inférieurs à l'XP actuel, puis on récupère les clés et on se place sur la dernière. La dernière étant le niveau actuel du personnage.

PS: Oui gt un peu beurré hier, j'ai fait vite Smile