PHP|Débutant :: Forums

Advertisement

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

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

#1 Re : Forum Général PHP » [CLASSEMENT] tenir compte des égalités » 05-07-2011 10:57:33

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

#2 Re : Forum Général PHP » [CLASSEMENT] tenir compte des égalités » 05-07-2011 10:57:33

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

#3 Forum Général PHP » [CLASSEMENT] tenir compte des égalités » 05-07-2011 10:57:33

osiris73
Réponses : 4

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

#4 Re : Forum Général PHP » Classement avec point identique » 21-12-2010 10:21:05

voici le script qui permet de faire ce que je veux

<?php
$requete = "SELECT * FROM 'joueur' ORDER BY VICTOIRE DESC";
$resultat = requete( $requete );

$lastScore = '';
$displayPos = 1;
$realPos = 1;

while($data = mysql_fetch_array($resultat)) {
   $joueur = $data['nom'];
   $currentScore = $data['score'];

   if ($currentScore != $lastScore) { $displayPos = $realPos; }
   $lastScore = $currentScore;

   print $joueur.' - '.$displayPos;
   $realPos++;
}

Merci à coeus

Osiris73

#5 Forum Général PHP » Classement avec point identique » 21-12-2010 10:21:05

osiris73
Réponses : 3

Bonjour à tous,

Je voudrais faire un classement qui tienne compte du nombre de victoire identique

voici mon code

[c]$requete = "SELECT * FROM `joueur` ORDER BY VICTOIRE DESC";
$resultat =mysql_query( $requete );

$i=1;
while($data = mysql_fetch_array($resultat))
{
$query='UPDATE `joueur` SET `CLASSEMENT`='.$i.' WHERE `ID`='.$data['ID'].'';
$result = mysql_query($query) or die(mysql_error());
$i=$i+1;
}


mysql_close()[/c]

Par contre ce script ne tient pas compte des égalités de points ?

j'avoue que je n'ai pas trop d'idée sur la question

voici un exemple:

Alain à 15 victoires --> il est le premier
Paul à 10 victoires --> il se trouve 2eme
Antoine à 10 vitoires --> il est également 2eme
Christophe à 8 victoires --> il est 4ème

voilà ce que j'aimerais avoir

Si quelqu'un à une idée

Merci d'avance

Osiris73

#6 Re : Forum Général PHP » passage d'une variable sur la meme page? » 07-12-2010 09:11:24

Super !!!

Merci xTG,

le echo $query m'affichait bien la requete mais grace à la ligne or die(mysql_error()) j'ai pu voir le vrai message d'erreur qui était simplement que le prénom ne pouvait contenir une valeur NULL

Merci encore

Osiris73

#7 Re : Forum Général PHP » passage d'une variable sur la meme page? » 07-12-2010 09:11:24

Salut Moogli,

merci pour ta réponse, alors j'ai un peu avancé sur mon problème:

J'ai donc 2 fichiers, formulaire.php et resultat.php.

Voici le contenu du fichier formulaire.php


<?php if (!isset($_POST["NB_Joueur"]))
{
?>
<form action="" method="post">Nombre
de joueur <input name="NB_Joueur" type="text"><br>
  <input value="OK" type="submit"></form>

<?php }
?>
<form action="resultat.php" method="post"><?php if (isset($_POST["NB_Joueur"]))
  {
    $NB_Joueur = htmlspecialchars($_POST["NB_Joueur"], ENT_QUOTES);

    if ($NB_Joueur > 0)
    {
      $ID_Joueur = 1;
 
      while ($NB_Joueur > 0)
      {
        echo '<label for="NOM_Joueur_'.$ID_Joueur.'">Nom du Joueur '.$ID_Joueur.'</label> <input type="text" name="NOM_Joueur_'.$ID_Joueur.'" id="NOM_Joueur_'.$ID_Joueur.'"><br>'."\n";

        $ID_Joueur++;
        $NB_Joueur--;
      }
    }
    else
    {
      echo "Erreur !";
    }
  ?>
  <input value="OK" type="submit"></form>

  <?php }

?>
 

Et voici le contenu de mon fichier resultat.php


<?php for( $i=1; $i <= 4;$i++)
{

$query = "INSERT INTO `tirageausort` (`Id`,`Prenom`,`Nom`,`Dispo`) VALUES (NULL,NULL,'".$_POST['NOM_Joueur_'.$i]."','0')";
?>
<br>
<?php echo $query;
$result = mysql_query($query);
}
 

Le problème c'est que quand je vais dans la table tirageausort il n'y a aucun champ rempli, elle reste vide

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

Merci bcp

P.S: quelque précision Id s'auto-incrémente tout seul et j'ai mis $i à 4 pour des tests

Osiris73

#8 Forum Général PHP » passage d'une variable sur la meme page? » 07-12-2010 09:11:24

osiris73
Réponses : 4

Bonjour à tous,

J'ai une page qui me demande le nombre de joueur avec un bouton ENVOYER
en fonction de ce nombre je voudrais afficher le champ: nom du joueur 1
nom du joueur 2 etc ... selon en fait le nombre saisie dans la première question et tout cela dans la même page

Je ne sais pas si je suis clair ?

Par exemple, si on met comme réponse 3 à la question, j'aurais alors 3 champs textes qui apparaissent
avec "Nom du joueur 1?":
"Nom du joueur 2?" :
"Nom du joueur 3?" :

En tout cas par avance merci à vous

Osiris73

Pied de page des forums

Propulsé par FluxBB