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 avec un update


Sujet :

PHP & Base de données

  1. #1
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 220
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 220
    Points : 262
    Points
    262
    Par défaut Problème avec un update
    Bonjour,

    J’ai créé une 1ère requête qui récupère les attributs de chaque joueur (8 joueurs) et qui en fait la somme.
    Je voudrais maintenant que cette somme des attributs pour chaque joueur soit mis dans une table qui contient déjà leur nom.
    J’ai donc une table avec les attributs des joueurs celle qui me permet de faire la somme.
    Puis j’ai une table avec leur nom déjà la table masters. J’ai créer une nouvelle colonne et je voudrais dans cette colonne que vienne s’insérer à l’aide d’un update donc la somme pour chacun des joueurs.
    Voilà la requête qui fait la somme (celle là marche) et l’update que j’essaie de faire mais j’ai ce message d’erreur «Parse error: parse error, unexpected T_WHILE» :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    $req="select joueurcaract.lib_nomcaract, sum(joueurcaract.valeur)-nb_tournoi
    from joueurcaract, classement, masters, tournoi, tournoicaract
    where classement.nom_classement=joueurcaract.lib_nomcaract
    and joueurcaract.lib_joueurcaract=tournoicaract.lib_tournoicaract
    and tournoicaract.nom_tournoicaract=tournoi.nom_tournoi
    and tournoi.nom_tournoi=masters.no_tournoi
    and masters.name_j=joueurcaract.lib_nomcaract
    group by joueurcaract.lib_nomcaract
    order by rang;";
     
    $res=mysql_query($req)		
    while($row=mysql_fetch_row($res))
    {
    	mysql_query("update masters, classement set tot_caract=$row[1] where masters.name_j=classement.nom_classement and rang=".$row['classement.rang']);
    }
    Merci d’avance

  2. #2
    Membre averti Avatar de Joe Le Mort
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 392
    Points : 388
    Points
    388
    Par défaut
    tu devrais mettre des alias a tes noms de tables quand tu fais des jointures

    mysql_query("update masters m, classement c set ??.tot_caract=".$row[1]." where m.name_j=c.nom_classement and ??.rang=".$row['c.rang']);
    Tuxboard Blog d'actu Buzz...
    Video de sport

  3. #3
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 220
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 220
    Points : 262
    Points
    262
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $res=mysql_query($req)		
    while($row=mysql_fetch_row($res))
    {
    mysql_query("update masters m, classement c set m.tot_caract='.$row[1].' where m.name_j=c.nom_classement and c.rang=".$row['c.rang']);
    }
    Voilà ma ligne de code modifié mais j'ai toujours ce message d'erreur "Parse error: parse error, unexpected T_WHILE"

  4. #4
    Membre averti Avatar de Joe Le Mort
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 392
    Points : 388
    Points
    388
    Par défaut
    $res=mysql_query($req) ;
    while($row=mysql_fetch_row($res))
    {
    mysql_query("update masters m, classement c set m.tot_caract='.$row[1].' where m.name_j=c.nom_classement and c.rang=".$row['c.rang']);
    }
    point virgule !
    sinon ton erreur vient d'une erreur de syntaxe avec WHILE
    Tuxboard Blog d'actu Buzz...
    Video de sport

  5. #5
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 220
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 220
    Points : 262
    Points
    262
    Par défaut
    J'ai bien mis le point virgule donc il n'y a plus le message d'erreur par contre le update ne se fait pas ma colonne tot_caract reste à 0 pour chaque joueur.
    Pour quelle raison ?

  6. #6
    Membre averti Avatar de Joe Le Mort
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 392
    Points : 388
    Points
    388
    Par défaut
    Citation Envoyé par leloup84
    J'ai bien mis le point virgule donc il n'y a plus le message d'erreur par contre le update ne se fait pas ma colonne tot_caract reste à 0 pour chaque joueur.
    Pour quelle raison ?
    deja il y a un probleme avec la jointure que tu fais.
    Normalement, on joint en fonction d'un ID et non d'un nom... car il peut changer...

    Apres j'ai besoin de ta premiere requete :
    $res=mysql_query($req) ;

    car tu fais dans ton update : m.tot_caract='.$row[1].'
    et je ne pense pas que tu aies un champs qui s'appelle "1" !
    Donc le probleme vient de la
    Tuxboard Blog d'actu Buzz...
    Video de sport

  7. #7
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 220
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 220
    Points : 262
    Points
    262
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $req="select joueurcaract.lib_nomcaract, sum(joueurcaract.valeur)-nb_tournoi
    				from joueurcaract, classement, masters, tournoi, tournoicaract
    				where classement.nom_classement=joueurcaract.lib_nomcaract
    				and joueurcaract.lib_joueurcaract=tournoicaract.lib_tournoicaract
    				and tournoicaract.nom_tournoicaract=tournoi.nom_tournoi
    				and tournoi.nom_tournoi=masters.no_tournoi
    				and masters.name_j=joueurcaract.lib_nomcaract
    				group by joueurcaract.lib_nomcaract
    				order by rang;";
     
    		$res=mysql_query($req);		
    		while($row=mysql_fetch_row($res))
    		{
    		mysql_query("update masters m, classement c set m.tot_caract='.$row[1].' where m.name_j=c.nom_classement and c.rang=".$row['c.rang']);
    		}
    Voilà ma 1ère requête celle là fonctionne suivi de ma 2ème donc celle avec le update qui ne fonctionne pas.

  8. #8
    Membre averti Avatar de Joe Le Mort
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 392
    Points : 388
    Points
    388
    Par défaut
    question concernant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m.tot_caract='.$row[1].'
    c'est quel champs de ton SELECT, ca : $row[1] pour toi ??
    Tuxboard Blog d'actu Buzz...
    Video de sport

  9. #9
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 220
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 220
    Points : 262
    Points
    262
    Par défaut
    C'est la sum dans le select

  10. #10
    Membre averti Avatar de Joe Le Mort
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    392
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 392
    Points : 388
    Points
    388
    Par défaut
    Citation Envoyé par leloup84
    C'est la sum dans le select
    donc tu dois lui mettre un alias !!

    exemple : sum(joueurcaract.valeur)-nb_tournoi as SOMME

    comme ca, tu pourras utiliser SOMME en tant que "nom de champs" pour l'affichage :
    $row['SOMME'] à la place de $row[1]
    Tuxboard Blog d'actu Buzz...
    Video de sport

  11. #11
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 220
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 220
    Points : 262
    Points
    262
    Par défaut
    J'ai bien mis un alias dans ma requête que j'ai utilisé ensuite à la place de mon $row[1] mais ma colonne tot dans ma table reste toujours à 0 ???

  12. #12
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Elle me semble un bizarre la clause where de ton update

    where m.name_j=c.nom_classement and c.rang=".$row['c.rang']
    Déjà ce serait plutôt $row['rang'] a condition que cette cellule existe dans le tabelau $row. Cela ne semble pas être le cas dans ta 1ère requète

    Pierre
    Pierre
    1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
    2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
    3. Un code rapide c'est bien, un code maintenable c'est mieux
    ...

    Why was the font tag an orphan ? Because it didn't have a font-family.

  13. #13
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 220
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 220
    Points : 262
    Points
    262
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $req="select joueurcaract.lib_nomcaract, sum(joueurcaract.valeur)-nb_tournoi as somme
    				from joueurcaract, classement, masters, tournoi, tournoicaract
    				where classement.nom_classement=joueurcaract.lib_nomcaract
    				and joueurcaract.lib_joueurcaract=tournoicaract.lib_tournoicaract
    				and tournoicaract.nom_tournoicaract=tournoi.nom_tournoi
    				and tournoi.nom_tournoi=masters.no_tournoi
    				and masters.name_j=joueurcaract.lib_nomcaract
    				group by joueurcaract.lib_nomcaract
    				order by rang;";
     
    		$res=mysql_query($req);		
    		while($row=mysql_fetch_row($res))
    		{
    		mysql_query("update masters m, classement c set m.tot_caract=".$row['somme']." where m.name_j=c.nom_classement and c.rang=".$row['rang']);
    		}
    Voilà donc mon bout de code. Alors comment je fais pour que la somme calculé dans la 1ère requête pour chaque joueur se modifie pour bien dans la table masters pour ces mêmes joueurs sachant qu'un nom est unique c'est pour cela que je peux faire des jointures dessus, car un nom contient en fait (prénom et nom) ???
    Merci d'avance car je suis bloqué là dessus depuis quelques jours.

  14. #14
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    nb_tournoi la variable c'est quoi ?
    C'est une colonne dans la base de donnée ?
    Variable de php ?

  15. #15
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 220
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 220
    Points : 262
    Points
    262
    Par défaut
    c'est une colonne de la table classement

  16. #16
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Pourquoi ce n'est pas classement.nb_tournoi et pourquoi tu ne récupères pas le rang dans le select ?

  17. #17
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 220
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 220
    Points : 262
    Points
    262
    Par défaut
    comment çà ? Peut tu me donner le bout de code que tu pense qui doit être modifié ?
    Merci d'avance

  18. #18
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    En essayant de boucher les trous...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $req="select joueurcaract.lib_nomcaract as nom, rang, sum((joueurcaract.valeur)-nb_tournoi) as somme
    				from joueurcaract, classement, masters, tournoi, tournoicaract
    				where classement.nom_classement=joueurcaract.lib_nomcaract
    				and joueurcaract.lib_joueurcaract=tournoicaract.lib_tournoicaract
    				and tournoicaract.nom_tournoicaract=tournoi.nom_tournoi
    				and tournoi.nom_tournoi=masters.no_tournoi
    				and masters.name_j=joueurcaract.lib_nomcaract
    				group by joueurcaract.lib_nomcaract
    				order by rang;";
     
    		$res=mysql_query($req);		
    		while($row=mysql_fetch_row($res))
    		{
    		mysql_query("update masters m, classement c set m.tot_caract=".$row['somme']." where m.name_j=c.nom_classement and m.name_j='".$row['nom']."' and c.rang=".$row['rang']);
    		}
    Ne sachant pas l'organisation de la bdd...

    Par contre, faire un id avec un nom, mauvaise idée...
    Vaut mieux mettre un nombre en id, car si tu veux changer le nom du joueur, il faut modifier toutes tes tables semble t'il, alors que si tu avais un nombre en clé, il suffirait de modifier la table joueur, la clé étant inchangée.

  19. #19
    Membre actif
    Inscrit en
    Janvier 2006
    Messages
    1 220
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 220
    Points : 262
    Points
    262
    Par défaut
    la colonne tot_carat ne se modifie toujous pas et reste toujours à 0.

  20. #20
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Cela donne quoi dans la boucle while ?

    Tu es sur de ta requête $req?

Discussions similaires

  1. [MySQL] problèmes avec mes Update
    Par carlos587261 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 18/05/2007, 08h02
  2. [MySQL] problème avec un update
    Par soork dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 05/04/2007, 12h22
  3. Problème avec un update et un champs
    Par kornmuse90 dans le forum Requêtes
    Réponses: 3
    Dernier message: 27/03/2006, 15h55
  4. [VB6] Problème avec requête Update
    Par bb62 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 02/02/2006, 03h40

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