Calcul d'un rang avec 2 tables [Résolu]

cs_Alpha911 88 Messages postés vendredi 15 avril 2005Date d'inscription 13 août 2011 Dernière intervention - 13 août 2011 à 12:48 - Dernière réponse : coucou747 12336 Messages postés mardi 10 février 2004Date d'inscription 30 juillet 2012 Dernière intervention
- 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 ?

Merci
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
coucou747 12336 Messages postés mardi 10 février 2004Date d'inscription 30 juillet 2012 Dernière intervention - 13 août 2011 à 15:10
3
Merci
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

un truc comme ça devrait fonctionner

Merci coucou747 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 75 internautes ce mois-ci

Commenter la réponse de coucou747
Meilleure réponse
coucou747 12336 Messages postés mardi 10 février 2004Date d'inscription 30 juillet 2012 Dernière intervention - 13 août 2011 à 19:40
3
Merci
un truc comme ça ?

$classement = 1;
while($sqlfix = mysql_fetch_array($requete))
{

if($sqlfix == $idjoueur)
{ print_r($sqlfix) ;
echo $classement;
}

$classement ++;

}



Si tu pouvais donner l'erreur SQL, ça pourrait etre utile.

Merci coucou747 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 75 internautes ce mois-ci

Commenter la réponse de coucou747
coucou747 12336 Messages postés mardi 10 février 2004Date d'inscription 30 juillet 2012 Dernière intervention - 13 août 2011 à 13:55
0
Merci
Bonjour,

Qu'as tu tenté comme requetes ?

SELECT count(points) AS count, joueur FROM my_table GROUP BY joueur

Ca ne fonctionne pas ?

Cordialement,

Maxime
Commenter la réponse de coucou747
cs_Alpha911 88 Messages postés vendredi 15 avril 2005Date d'inscription 13 août 2011 Dernière intervention - 13 août 2011 à 14:42
0
Merci
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
Commenter la réponse de cs_Alpha911
cs_Alpha911 88 Messages postés vendredi 15 avril 2005Date d'inscription 13 août 2011 Dernière intervention - 13 août 2011 à 17:23
0
Merci
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.
Commenter la réponse de cs_Alpha911
coucou747 12336 Messages postés mardi 10 février 2004Date d'inscription 30 juillet 2012 Dernière intervention - 13 août 2011 à 17:44
0
Merci
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 )

ça peut fonctionner.
Commenter la réponse de coucou747
coucou747 12336 Messages postés mardi 10 février 2004Date d'inscription 30 juillet 2012 Dernière intervention - 13 août 2011 à 17:45
0
Merci
Dsl, la requete a disparu...


SELECT COUNT(*) FROM

(SELECT count(points) AS points FROM points GROUP BY is_joueur
WHERE points >

(SELECT count(points) AS points FROM points WHERE id_joueur = ID_DU_JOUEUR_COURRANT)

)
Commenter la réponse de coucou747
cs_Alpha911 88 Messages postés vendredi 15 avril 2005Date d'inscription 13 août 2011 Dernière intervention - 13 août 2011 à 19:21
0
Merci
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).
Commenter la réponse de cs_Alpha911
cs_Alpha911 88 Messages postés vendredi 15 avril 2005Date d'inscription 13 août 2011 Dernière intervention - 13 août 2011 à 19:37
0
Merci
Je pense à une chose comme ca :

$requete = ("SELECT count( * ) AS points, idjoueur FROM points GROUP BY idjoueur ORDER BY `point` DESC");

while($sqlfix = mysql_fetch_array($requete))
{
if($sqlfix == $idjoueur)
{
fonction print_r($sqlfix)
}
}

ceci est approximatif pour le moment c'est la piste que je suis ....sachant que print_r donne la numerotation de l'affichage ...
Un avis ?
Commenter la réponse de cs_Alpha911
cs_Alpha911 88 Messages postés vendredi 15 avril 2005Date d'inscription 13 août 2011 Dernière intervention - 13 août 2011 à 20:05
0
Merci
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.

Bien à toi.
Commenter la réponse de cs_Alpha911
coucou747 12336 Messages postés mardi 10 février 2004Date d'inscription 30 juillet 2012 Dernière intervention - 13 août 2011 à 20:11
0
Merci
de rien, bon weekend et au plaisir de répondre à tes questions sur phpcs :)
Commenter la réponse de coucou747

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.