cs_Alpha911
Messages postés88Date d'inscriptionvendredi 15 avril 2005StatutMembreDernière intervention13 août 2011
-
13 août 2011 à 12:48
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 2012
-
13 août 2011 à 20:11
Bonjour,
Je me creuse la tête depuis hier et rien n'en sort ...
j'ai 2 tables comme ce qui suit :
*********** ************
* JOUEUR * * POINTS *
*********** ************
idjoueur *idpoint *
nomjoueur *idjoueur *
... *date *
----------- ************
Quand un joueur gagne 1 point une ligne est ajoutée systematiquement avec l'heure à laquelle il a gagné 1 seul point
Je souhaite faire afficher le rang
A savoir
Rang 1 DAMIEN avec 10 points
Rang 2 SYLVIE avec 6 points
...
je suis passé par pas mal de choses (sql count; creation d'un array_push, distinct)
rien y fait ...
Avez vous une piste ? une commande SQL ?, une solution qui sorte du cadre de sql ?
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 13 août 2011 à 15:10
bien :
SELECT count(points) AS points, id_joueur FROM points GROUP BY is_joueur ORDER BY points DESC
ça doit te donner le classement des joueurs (enfin leur id et leur nombre de points)
Si tu veux le nom, une jointure s'impose, mais ça reste du meme ordre.
SELECT count(points) AS points, id_joueur FROM points LEFT JOIN JOUEUR ON id_joueur GROUP BY is_joueur ORDER BY points DESC
cs_Alpha911
Messages postés88Date d'inscriptionvendredi 15 avril 2005StatutMembreDernière intervention13 août 2011 13 août 2011 à 14:42
Merci pour cette prise en charge,
SELECT count(points) AS count, joueur FROM points GROUP BY joueur
a été essayé mais me retourne aussi une erreur.
Je reprecise un peu comment sont organisés les tables si tu as une idée sachant que je souhaite faire un classement par rang
1 ere table JOUEUR
idjoueur, nomjoueur, prenomjoueur
2nde table POINTS
idpoint, datepoint, idjoueur
------------------------------------------
La table point s'incremente de ma manière suivante :
une ligne = 1 point on a donc la date à laquelle le point est gagné le total du score pour un joueur est généré par une requete de cette maniere
$id = $_GET['id'];
$sqlcalculpoint mysql_query("SELECT * FROM `POINTS` WHERE `idjoueur` '$id'");
$sommepointsjoueur = mysql_numrows($sqlcalculpoint);
Le soucis viens du fait que je n'arrive pas à trouver la logique pour sortir à la fin
un tableau ou le joueur est classé 36 ème sur 124 joueurs.
Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Alpha911
Messages postés88Date d'inscriptionvendredi 15 avril 2005StatutMembreDernière intervention13 août 2011 13 août 2011 à 17:23
Merci pour cette methode,
à present j'ai un tableau avec les joueurs :
SELECT count(points) AS points, id_joueur FROM points GROUP BY is_joueur ORDER BY points DESC
celui qui a le plus de point est en haut comment puis je afficher que ce joueur est 1 er ou 35 eme et uniquement ce joueur
exemple je suis sur la fiche du joueur n14 ($id = 14;) je veux qu'il connaisse uniquement son rang sans savoir qui est au dessu de lui ou en dessous
et sans lui donner le total de ses points.
Joueur 14 est 35 eme sur 114 membres.
Merci en tout ca grace à tes lumières ca progresse dans le bon sens.
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 13 août 2011 à 17:44
hum... la requete est un peu plus complexe je n'ai rien sous la main pour la tester, mais ça devrait ressembler à ça :
SELECT COUNT(*) FROM
(SELECT count(points) AS points FROM points GROUP BY is_joueur
WHERE points >
)
Si c'est trop lent, ou si ça ne fonctionne pas, tu peux le faire en deux étapes :
1 tu recupères
SELECT count(points) AS points FROM points WHERE id_joueur = ID_DU_JOUEUR_COURRANT
qui est le score courrant.
2 tu récupères
SELECT COUNT(*) FROM
(SELECT count(points) AS points FROM points GROUP BY is_joueur
WHERE points > Resultat_precedent )
cs_Alpha911
Messages postés88Date d'inscriptionvendredi 15 avril 2005StatutMembreDernière intervention13 août 2011 13 août 2011 à 19:21
Merci,
Je n'arrives pas à le faire tourner. Mais bon la piste du
SELECT count( * ) AS points, idjoueur FROM points GROUP BY idjoueur ORDER BY `point` DESC
est une très bonne piste je pense qu'il doit exister en php cette fois ce qu'il faut pour afficher un enregistrement
par l'id avec une numerotation sans augmenter la charge de la requete sql.
Qu'en penses tu ?
je pense à ajouter dans la boucle while une condition d'affichage il me reste plus qu'à trouver ce qui me permet de numeroter
le resultat en php (si toutefois ceci est faisable).
cs_Alpha911
Messages postés88Date d'inscriptionvendredi 15 avril 2005StatutMembreDernière intervention13 août 2011 13 août 2011 à 20:05
Ce que tu as mis fonctionne parfaitement il ni a pas besoin du print_r($sqlfix)
je suis bien content
voila ce que j'avais pour la requete sql comme erreur :
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE points > ( SELECT count( * ) AS points FROM points WHERE idjoueur = 61 ) ) LI' at line 1
j'ai mis des etoiles après les count car cela me retournait la même erreur et ca na rien changé. Cependant tu as tout à fait résolu le probleme concenant le calcul d'un rang avec 2 tables et je t'en suis très reconnaissant merci beaucoup.