[PHP] Selectionner tous nombres egaux

Résolu
Bonjour, j'aimerais savoir comme faire pour sélectionner tous les nombres qui sont égaux

car j'ai un jeu en ligne (style ogame) qui met à jour les stats qui récupère le classement grâce à:

	$Rank           = 1;
	$RankQry        = doquery("SELECT * FROM {{table}} WHERE `stat_type` = '1' AND `stat_code` = '1' ORDER BY `tech_points` DESC;", 'statpoints');
	while ($TheRank = mysql_fetch_assoc($RankQry) ) {
		$QryUpdateStats  = "UPDATE {{table}} SET ";
		$QryUpdateStats .= "`tech_rank` = '". $Rank ."' ";
		$QryUpdateStats .= "WHERE ";
		$QryUpdateStats .= " `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '". $TheRank['id_owner'] ."';";
		doquery ( $QryUpdateStats , 'statpoints');
		$Rank++;
	}

	$Rank           = 1;
	$RankQry        = doquery("SELECT * FROM {{table}} WHERE `stat_type` = '1' AND `stat_code` = '1' ORDER BY `build_points` DESC;", 'statpoints');
	while ($TheRank = mysql_fetch_assoc($RankQry) ) {
		$QryUpdateStats  = "UPDATE {{table}} SET ";
		$QryUpdateStats .= "`build_rank` = '". $Rank ."' ";
		$QryUpdateStats .= "WHERE ";
		$QryUpdateStats .= " `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '". $TheRank['id_owner'] ."';";
		doquery ( $QryUpdateStats , 'statpoints');
		$Rank++;
	}

	$Rank           = 1;
	$RankQry        = doquery("SELECT * FROM {{table}} WHERE `stat_type` = '1' AND `stat_code` = '1' ORDER BY `defs_points` DESC;", 'statpoints');
	while ($TheRank = mysql_fetch_assoc($RankQry) ) {
		$QryUpdateStats  = "UPDATE {{table}} SET ";
		$QryUpdateStats .= "`defs_rank` = '". $Rank ."' ";
		$QryUpdateStats .= "WHERE ";
		$QryUpdateStats .= " `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '". $TheRank['id_owner'] ."';";
		doquery ( $QryUpdateStats , 'statpoints');
		$Rank++;
	}

	$Rank           = 1;
	$RankQry        = doquery("SELECT * FROM {{table}} WHERE `stat_type` = '1' AND `stat_code` = '1' ORDER BY `fleet_points` DESC;", 'statpoints');
	while ($TheRank = mysql_fetch_assoc($RankQry) ) {
		$QryUpdateStats  = "UPDATE {{table}} SET ";
		$QryUpdateStats .= "`fleet_rank` = '". $Rank ."' ";
		$QryUpdateStats .= "WHERE ";
		$QryUpdateStats .= " `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '". $TheRank['id_owner'] ."';";
		doquery ( $QryUpdateStats , 'statpoints');
		$Rank++;
	}

	$Rank           = 1;
	$RankQry        = doquery("SELECT * FROM {{table}} WHERE `stat_type` = '1' AND `stat_code` = '1' ORDER BY `total_points` DESC;", 'statpoints');
	while ($TheRank = mysql_fetch_assoc($RankQry) ) {
		$QryUpdateStats  = "UPDATE {{table}} SET ";
		$QryUpdateStats .= "`total_rank` = '". $Rank ."' ";
		$QryUpdateStats .= "WHERE ";
		$QryUpdateStats .= " `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '". $TheRank['id_owner'] ."';";
		doquery ( $QryUpdateStats , 'statpoints');
		$Rank++;
	}


j'aimerai savoir comme sélectionner tous les classement avec le même nombre de points pour pouvoir mettre un classement indentique genre un "-" au lieu d'un chiffre merci si vous avez besoin de plus de renseignement je suis la merci
Configuration: Windows Vista
Firefox 2.0.0.14

10 réponses

  1. Contributeur
    Salut,

    Comme ta requête est ordrée, tu peux utiliser une variable de contrôle sur ta boucle, qui contiendra la valeur précédente :
    while( ....)
    {
      if( $tech_points_old == $TheRank['tech_points'] )
      {
        // Impression du '-'
      }
      $tech_points_old = $TheRank['tech_points'];
    }


    @Bientôt
    1. j'ai déjà un truc si tech_points_old == tech_points moi c'est les points du joueur d'avant que je voudrais comparais

      ps: je sais pas si c'est possible par contre

      EDIT: un truc du genre :

      	$Rank           = 1;
      	$RankQry        = doquery("SELECT * FROM {{table}} WHERE `stat_type` = '1' AND `stat_code` = '1' ORDER BY `tech_points` DESC;", 'statpoints');
      	$techpoint                     = $TheRank['tech_points'];
      	while ($TheRank = mysql_fetch_assoc($RankQry) ) {
      	  if( $techpoint == $TheRank['tech_points'] )
        {
          $QryUpdateStats  = "UPDATE {{table}} SET ";
      		$QryUpdateStats .= "`tech_rank` = '-' ";
      		$QryUpdateStats .= "WHERE ";
      		$QryUpdateStats .= " `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '". $TheRank['id_owner'] ."';";
      		doquery ( $QryUpdateStats , 'statpoints');
      	  $Rank++;
        }else{
      		$QryUpdateStats  = "UPDATE {{table}} SET ";
      		$QryUpdateStats .= "`tech_rank` = '". $Rank ."' ";
      		$QryUpdateStats .= "WHERE ";
      		$QryUpdateStats .= " `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '". $TheRank['id_owner'] ."';";
      		doquery ( $QryUpdateStats , 'statpoints');
      		$Rank++;
      	}
      }


      pour les techs .

      EDIT: marche pas :( une idée please ?
      1. j'ai fais un autre truc ça marche mais le problème c'est que si y'en a un qui a les même points il met pour tous le monde le classement égal a "-"
        	$Rank           = 1;
        	$Rankdo           = doquery("SELECT * FROM {{table}} WHERE `stat_type` = '1' AND `stat_code` = '1' ORDER BY `total_points` DESC;", 'statpoints');
        	$RankQry        = doquery("SELECT * FROM {{table}} WHERE `stat_type` = '1' AND `stat_code` = '1' AND `total_points` = '". $Rank['total_points'] ."' ORDER BY `total_points` DESC;", 'statpoints');
        
        	$totalpoint                     = $TheRank['total_points'];
        	while ($TheRank = mysql_fetch_assoc($Rankdo) ) {
        	while ($pointrank = mysql_fetch_assoc($RankQry) ) {
        	  if( $pointrank == true )
          {
            $QryUpdateStats  = "UPDATE {{table}} SET ";
        		$QryUpdateStats .= "`total_rank` = '-' ";
        		$QryUpdateStats .= "WHERE ";
        		$QryUpdateStats .= " `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '". $pointrank['id_owner'] ."';";
        		doquery ( $QryUpdateStats , 'statpoints');
        
        	  $Rank++;
        echo "rank++==>";print_r ($QryUpdateStats);
          }else{
        		$QryUpdateStats  = "UPDATE {{table}} SET ";
        		$QryUpdateStats .= "`total_rank` = '". $Rank ."' ";
        		$QryUpdateStats .= "WHERE ";
        		$QryUpdateStats .= " `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '". $TheRank['id_owner'] ."';";
        		doquery ( $QryUpdateStats , 'statpoints');
        		$Rank++;
        echo 'Version else';
        	}
        }
        }


        je sais je l'ai mal coder (noms des variables :p ) mais c'étais pour un test comment faire pour qu'il mette le bon classement pour les autres personnes merci .

        ps: j'ai 15 ans je code pas comme un pro désoler si j'ai du mal à comprendre, je trouve je me débrouille pas mal encore :p avec une experience B2i XD
        1. Contributeur
          Autant le premier code était claire, autant celui-là l'est beaucoup moins ....

          Si j'ai bien compris, tu veux mettre le rank à une personne, et un '-' à toutes les autres personnes qui ont le même nombre de points ? ....

          PS : c'est très bien de commencer à programmer jeune ... (j'ai commencer aussi "très" jeune, et j'ai 19 ans aujourd'hui ...)
          1. XD je l'ai preciser mais c'est pour les tests oui t'as tous compris le 2 eme code marchent mais il le fais pour tous le monde si quelqu'un a le même nombre de point que quelqu'un d'autre il met des '-' a tous le monde. Aurais-tu une idée
            merci de t'as réponse

            ps:oui sa dois faire 6 mois que je code y'a ma team de jeune codeur avec qui on s'entraide pour notre jeu style ogame, un codeur pro qui m'as expliquer toutes les bases et tous que je remercie beaucoup en même temps c'est son job donc pour lui c'est simple et surtout Le site du zero qui m'a beaucoup aider c'est grâce à ça que je suis codeur comme ça et à mes heure passer au codage ( 4-5 h par jour min ^^ je suis presque un no-live XD)
            1. Contributeur
              Essaye ça :
              $Rank = 1;
              $RankQry = doquery("SELECT * FROM {{table}} WHERE `stat_type` = '1' AND `stat_code` = '1' ORDER BY `tech_points` DESC;", 'statpoints');
              
              $techpoints_old = "";
              
              while ($TheRank = mysql_fetch_assoc($RankQry) )
              {
              	$QryUpdateStats = "UPDATE {{table}} SET ";
              	
              	if( $TheRank['tech_points'] == $techpoints_old )
              	{
              		$QryUpdateStats .= "`tech_rank` = '-' ";	
              	}else{
              		$QryUpdateStats .= "`tech_rank` = '$Rank' ";
              	}
              	
              	$QryUpdateStats .= "WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '". $TheRank['id_owner'] ."';";
              	doquery ( $QryUpdateStats , 'statpoints');
              	
              	$Rank++;
              }
              1. Non désoler sa marche pas si vous trouver pas c'est pas grave je met l'idée de coter et j'attend que mon amis pro codeur se co :p XD
                1. Contributeur
                  Ce que je suis bête ... j'ai oublié une ligne ... :D
                  $Rank = 1;
                  $RankQry = doquery("SELECT * FROM {{table}} WHERE `stat_type` = '1' AND `stat_code` = '1' ORDER BY `tech_points` DESC;", 'statpoints');
                  
                  $techpoints_old = "";
                  
                  while ($TheRank = mysql_fetch_assoc($RankQry) )
                  {
                  	$QryUpdateStats = "UPDATE {{table}} SET ";
                  	
                  	if( $TheRank['tech_points'] == $techpoints_old )
                  	{
                  		$QryUpdateStats .= "`tech_rank` = '-' ";	
                  	}else{
                  		$QryUpdateStats .= "`tech_rank` = '$Rank' ";
                  	}
                  	
                  	$QryUpdateStats .= "WHERE `stat_type` = '1' AND `stat_code` = '1' AND `id_owner` = '". $TheRank['id_owner'] ."';";
                  	doquery ( $QryUpdateStats , 'statpoints');
                  	
                  	$techpoints_old = $TheRank['tech_points'];
                  	$Rank++;
                  }
                  1. Merci ça a l'air de marchais je vais apporter quelque modif car la sa bug un peu avec les stats mais merci beaucoup
                    bonne journée
                    1. Contributeur
                      Mais c'est tout normal, quand je peux aider je le fais.

                      Bonne journée à toi aussi et @bientôt