PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 24-05-2011 07:39:48

osiris73
Membre
Inscription : 03-12-2010
Messages : 8

[CLASSEMENT] tenir compte des égalités

Bonjour à tous,

Je vous explique mon problème, j'ai un classement de joueurs en fonction des votes et je voudrais tenir compte des égalités, par exemple, le 1er a 30 pts le 2eme à 20pts et le 3eme a 10pts
Voici ce que j'ai fait

$RechercheJoueur="SELECT * FROM `sondage_choix` WHERE `vote`>0 ORDER BY `vote` DESC";
$resultat = mysql_query($RechercheJoueur);
     $lastScore = '';
    $displayPos = 1;
    $realPos = 1;
//je prends en compte les égalités de points
    while ($data = mysql_fetch_array($resultat))
    {
       $prenom[$realPos]= $data['intitule'];
      $currentScore = $data['nbr'];
     
      if ($currentScore != $lastScore)
        {
          $displayPos = $realPos;
        }
      $lastScore = $currentScore;
     
           
      //$prenom[$realPos]= $data['intitule'];
      $realPos++;
     
    }
   
      $query1="SELECT * FROM `recompenses` WHERE `PRENOM` LIKE '".$prenom[1]."'";
 
      $resultat1 = mysql_query($query1) or die(mysql_error());
      $data = mysql_fetch_array($resultat1);
      $prenom[1]= $data['PRENOM'];
      $Pts_avant[1] = $data['PTS'];
      $Pts_premier[1]=$Pts_avant[1]+30;
      $query = "UPDATE `ifb_mysql`.`recompenses` SET `PTS`='".$Pts_premier[1]."' WHERE `PRENOM` LIKE '".$prenom[1]."'";
      $result = mysql_query($query) or die(mysql_error());
     
     
     
      $query2="SELECT * FROM `ifb_mysql`.`recompenses` WHERE `PRENOM` LIKE '".$prenom[2]."'";
 
      $resultat2 = mysql_query($query2) or die(mysql_error());
      $data = mysql_fetch_array($resultat2);
      $prenom[2]= $data['PRENOM'];
      $Pts_avant[2] = $data['PTS'];
      $Pts_premier[2]=$Pts_avant[2]+20;
      $query = "UPDATE `ifb_mysql`.`recompenses` SET `PTS`='".$Pts_premier[2]."' WHERE `PRENOM` LIKE '".$prenom[2]."'";
      $result = mysql_query($query) or die(mysql_error());
   
      $query3="SELECT * FROM `ifb_mysql`.`recompenses` WHERE `PRENOM` LIKE '".$prenom[3]."'";
 
      $resultat3 = mysql_query($query3) or die(mysql_error());
      $data = mysql_fetch_array($resultat3);
      $prenom[3]= $data['PRENOM'];
      $Pts_avant[3] = $data['PTS'];
      $Pts_premier[3]=$Pts_avant[3]+10;
      $query = "UPDATE `ifb_mysql`.`recompenses` SET `PTS`='".$Pts_premier[3]."' WHERE `PRENOM` LIKE '".$prenom[3]."'";
      $result = mysql_query($query) or die(mysql_error());

 

Le probleme dans tout cela c'est si 2 gars sont à égalités de vote et ben il fait une distinction
Par exemple 3 votes pour le 1er
2 votes pour le 2eme
2 votes pour le 3eme
ben il fait quand meme une distinction par l'ordre alphabetique
si Paul à 3 votes
Alain à 2 votes
et Simon à 2 votes
alors Paul aura bien 30 pts
Alain aura bien 20 pts mais Simon aura LUI 10 pts et NON 20pts comme je le veux

Est-ce que quelqu'un aurait une idée sur la question ?

Merci bcp

osiris73

Hors ligne

#2 24-05-2011 07:53:57

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : [CLASSEMENT] tenir compte des égalités

osiris73 a écrit :

Est-ce que quelqu'un aurait une idée sur la question ?

Voui.


Il faut mettre la table qui comporte la colonne discriminante pour le classement en auto-non-équijointure, de manière à compter, dans la deuxième occurrence de la table, le nombre de joueurs qui ont plus de points que celui de la ligne en cours.
Cette façon de faire attribuera le même rang à ceux qui ont le même nombre de joueurs ayant un score supérieur à eux..


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#3 24-05-2011 08:38:12

osiris73
Membre
Inscription : 03-12-2010
Messages : 8

Re : [CLASSEMENT] tenir compte des égalités

Merci de me répondre,

Je t’avoue que je ne comprends pas trop la notion de
"classement en auto-non-équijointure"

peux-tu me donner un exemple de script qui illustre ton propos

Merci en tout cas de m'avoir répondu

Hors ligne

#4 24-05-2011 10:35:23

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : [CLASSEMENT] tenir compte des égalités

La guerre des étoiles

SELECT sc1.lesnomsdecolonnesquivontbienetpasétoile,
       COUNT(*) AS rang
FROM `sondage_choix` AS sc1
JOIN `sondage_choix` AS sc2
    ON sc1.vote <= sc2.vote
GROUP BY sc1.id_joueur
ORDER BY rang

Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#5 05-07-2011 10:57:33

osiris73
Membre
Inscription : 03-12-2010
Messages : 8

Re : [CLASSEMENT] tenir compte des égalités

Bonjour Maljuna Kris,

J'ai essayé de faire la requete que tu m'avais indiqué à savoir

SELECT sc1.nbr, sc1.intitule,COUNT(*) AS rang
 FROM `sondage_choix` AS sc1
 JOIN `sondage_choix` AS sc2
 ON sc1.nbr <= sc2.nbr GROUP BY sc1.intitule
 ORDER BY rang

 

Alors sur ma table sondage_choix j'ai la colonne nbr qui est le nombre de vote pour le joueur
la colonne intitule correspond au prenom du joueur
voici le contenu de la table sondage_choix

intitule               nbr
TOTO                7
TITI               6
TATA             6     
TONTON             3

Quand je lance la requete il me donne le résultat suivant

nbr     intitule           rang
7     TOTO             1
6     TATA             3
6     TITI              3
3     TONTON            4

Le probleme est que le rang pour TITI et TATA ne correspond pas, il faudrait avoir le 2

Autre probleme

si les 2 premiers ont le meme nombre de vote, par exemple TOTO et TITI et bien  la requete m'affiche


nbr     intitule           rang
7     TOTO            2
7     TITI               2
6     TATA              3
3     TONTON          4

du coup au lieu d'avoir le rang 1 qui s'affiche pour les 1er j'ai le rang 2 ??

merci de tout aide

Osiris73

Hors ligne

Pied de page des forums