IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Problème pour la modification d'un champ d'une table [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 218
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 218
    Points : 257
    Points
    257
    Par défaut Problème pour la modification d'un champ d'une table
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $req5="select * from classement order by pts desc;";
    	$res5=mysql_query($req5);
    	$i=1;
    	while($row=mysql_fetch_row($res5))
    	{
    		$req6="update classement set rang=$i;";
    		$res6=mysql_query($req6);
    		$i=$i+1;
    	}
    Voici ma requete actuelle. Je sélectionne tout les joueurs dans classement par ordre du nombre du points, puis je modifie leur champ rang dans cette même table en faisant une boucle et en modifiant ce rang par la donnée $i que j'incrémente de 1 à chaque fois. Problème j'ai 225 joueurs et il insère pour tout le joueurs la donnée 225 au champ rang. Moi je veux qu'il insère 1, 2, 3...224, 225. Quel est le problème ?

    Merci d'avance

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 774
    Points : 936
    Points
    936
    Par défaut
    ta requete marche pas parce q tu converti $i en string alors q rang est certainement de type numeric
    essai plutot ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     $req6='update classement set rang='.$i;
    Les hommes naissent et demeurent libres et egaux en dignité et en droit. Les distinctions sociales ne peuvent etre fondées que sur l'utilité commune. Article 1 droits et de l'homme et du citoyen. 1789

  3. #3
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 265
    Points : 332
    Points
    332
    Par défaut
    met une clause WHERE dans ton update sinon il met la même valeur à tous les champs.

  4. #4
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 218
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 218
    Points : 257
    Points
    257
    Par défaut
    d'une ouatmad ta solution ne marche pas mieux
    et MacReiben mettre quoi dans le where sachant qu'il ont déjà un classement d'origine mais qu'il doit être modifié en fonction de leur points ?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : Pays-Bas

    Informations forums :
    Inscription : Décembre 2005
    Messages : 186
    Points : 133
    Points
    133
    Par défaut
    je ne comprends pas ce que tu veux faire exactement met vu que tu n as pas de clause where ta boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    while($row=mysql_fetch_row($res5)) 
       { 
          $req6="update classement set rang=$i;"; 
          $res6=mysql_query($req6); 
          $i=$i+1; 
       }
    met d'abord a jour toutes les données de ta table en les passant a un, puis a 2 , etc, jusqu' a 225, nombre de tour de boucle.
    Si tu veux modifier selon une condition donnée il te faut une clause where, sinon toutes les données sont prises en compte.
    Par exempe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while($row=mysql_fetch_array($res5)){
     mysql_query("update classement set rang=$i where pts=$row['pts']");
     $i++;
    }
    En plus si tu rajoutes une claue group by pts dans ta requete $req5 ca te gerera les égalités de rang et de points.

  6. #6
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 218
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 218
    Points : 257
    Points
    257
    Par défaut
    C'est simple j'ai une table avec le nom des joueurs, leurs points et leut rang. Après avoir participé à un tournoi ils ont marqué des point donc leur rang (leur classement) a surement changé. Donc je veux modifié ce champ pour qu'il attribue à chaque joueur son nouveau rang au classement

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : Pays-Bas

    Informations forums :
    Inscription : Décembre 2005
    Messages : 186
    Points : 133
    Points
    133
    Par défaut
    dans ce cas le code que j'ai suggeré s'applique bien à ce que tu souhaites faire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while($row=mysql_fetch_array($res5)){ 
     mysql_query("update classement set rang=$i where pts=".$row['pts']); 
     $i++; 
    }
    Essaye ca, note que j'ai utilisé mysql_fetch_array pour recuperer la ligne de resultat , d'ou le $row['pts']

  8. #8
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 218
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 218
    Points : 257
    Points
    257
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $req5="select * from classement order by pts desc;";
    	$i=1;
    	while($row=mysql_fetch_array($res5))
    	{
     	mysql_query("update classement set rang=$i where pts=".$row['pts']);
     	$i++;
    	}
    Voilà désormais mon bout de code et il me met ce message, d'erreur :
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 774
    Points : 936
    Points
    936
    Par défaut
    la c'est ta requete qui marche pas. est tu sur q ton select renvoie un resultat valide?
    Les hommes naissent et demeurent libres et egaux en dignité et en droit. Les distinctions sociales ne peuvent etre fondées que sur l'utilité commune. Article 1 droits et de l'homme et du citoyen. 1789

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : Pays-Bas

    Informations forums :
    Inscription : Décembre 2005
    Messages : 186
    Points : 133
    Points
    133
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $req5="select * from classement order by pts desc;"; 
       $i=1; 
       while($row=mysql_fetch_array($res5)) 
       { 
        mysql_query("update classement set rang=$i where pts=".$row['pts']); 
        $i++; 
       }
    Ca c'est normal que ca ne fonctionne pas, si nulle part tu ne fais
    $res5=mysql_query($req5);

  11. #11
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 218
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 218
    Points : 257
    Points
    257
    Par défaut
    ok c'est bon,
    merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] modification d'un champ d'une table
    Par maringot dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 12/01/2010, 11h40
  2. Comment faire pour entrer plus de 255 champs dans une table.
    Par adelsunwind dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 16/03/2009, 19h35
  3. Requête SQL pour obtenir les intitulés des champs d'une table
    Par Zakapatul dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/12/2008, 09h51
  4. Modification nom de champ dans une table
    Par yoaugoulo dans le forum Langage SQL
    Réponses: 4
    Dernier message: 30/01/2008, 13h08
  5. cherche requette pour trouver le nom des champs dans une table
    Par maverick56 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 12/07/2007, 10h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo