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 :

requete update défaillante [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 55
    Par défaut requete update défaillante
    Bonjour,

    Je développe actuellement un site web en php/mysql et j'ai un petit souci de requête, je vous joins le schéma des tables ainsi que les requêtes qui ne fonctionnent pas. Le problème est le suivant: Lorsque les stats de l'équipe domicile sont mises à jour, celles de l'équipe extérieure est effacée et vis versa.

    schéma des tables:
    tab_stats: numClub, refChamp, nbPts, nbVic, nbNul, nbDef, nbBp, nbBc
    tab_match: numClubDom, numClubExt, numJournee, refChamp, scoreDom, scoreExt, penaltiesDom, penaltiesExt, joue

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    //MISE A JOUR MATCH
    $ins="update tab_match set scoreDom='".$sdom."', scoreExt='".$sext."' 
    	where numClubDom=".$ndom." and refChamp=".$refch." and                            numJournee=".$njour;
    $res=mysql_query($ins, $connexion) or die("Erreur lors de la mise à jour du match");
     
    //MISE A JOUR STATS EQUIPE DOM
    $cladom="update tab_stats STA
    SET nbPts=
    (select case when (MAT.scoreDom > MAT.scoreExt) then (nbPts + 4) 
    		 when (MAT.scoreDom = MAT.scoreExt) then (nbPts + 2)
    		 else nbPts+1 end from tab_match MAT
    where STA.numClub=".$ndom." and STA.refChamp=MAT.refChamp
     and MAT.numJournee=".$njour."
    and MAT.refChamp=".$refch."),
     
    nbVic=
    (select case when (MAT.scoreDom > MAT.scoreExt) then (nbVic + 1) 
    		 else nbVic end from tab_match MAT
    where STA.numClub=".$ndom." and STA.refChamp=MAT.refChamp
    and MAT.numJournee=".$njour."
    and MAT.refChamp=".$refch."),
     
    nbNul=
    (select case when (MAT.scoreDom = MAT.scoreExt) then (nbNul + 1)
                      else nbNul end from tab_match MAT
    where STA.numClub=".$ndom." and STA.refChamp=MAT.refChamp
    and MAT.numJournee=".$njour."
    and MAT.refChamp=".$refch."),
     
    nbDef=
    (select case when (MAT.scoreDom < MAT.scoreExt) then (nbDef + 1)
                      else nbDef end from tab_match MAT
    where STA.numClub=".$ndom." and STA.refChamp=MAT.refChamp
    and MAT.numJournee=".$njour."
    and MAT.refChamp=".$refch."),
     
    nbBp=nbBp+(select MAT.scoreDom from tab_match MAT
    where STA.numClub=".$ndom." and STA.refChamp=MAT.refChamp
    and MAT.numJournee=".$njour."
    and MAT.refChamp=".$refch."),
     
    nbBc=nbBc+(select MAT.scoreExt from tab_match MAT
    where STA.numClub=".$ndom." and STA.refChamp=MAT.refChamp
    and MAT.numJournee=".$njour."
    and MAT.refChamp=".$refch.")";
     
    $rcladom=mysql_query($cladom, $connexion) or die("Erreur de mise à jour pour l'équipe domicile");
     
    //MISE A JOUR STATS EQUIPE EXT
    $claext="update tab_stats STA
    SET nbPts=
    (select case when (MAT.scoreDom < MAT.scoreExt) then (nbPts + 4) 
    		 when (MAT.scoreDom = MAT.scoreExt) then (nbPts + 2)
    		 else nbPts+1 end from tab_match MAT
    where STA.numClub=MAT.numClubExt and STA.refChamp=MAT.refChamp and MAT.numClubDom=".$ndom." and MAT.numJournee=".$njour."
    and MAT.refChamp=".$refch."),
     
    nbVic=(select case when (MAT.scoreDom < MAT.scoreExt) then (nbVic + 1) 
    			  else nbVic end from tab_match MAT
    where STA.numClub=MAT.numClubExt and STA.refChamp=MAT.refChamp and MAT.numClubDom=".$ndom."
    and MAT.numJournee=".$njour."
    and MAT.refChamp=".$refch."),
     
    nbNul=(select case when (MAT.scoreDom = MAT.scoreExt) then (nbNul + 1)
                              else nbNul end from tab_match MAT
    where STA.numClub=MAT.numClubExt and STA.refChamp=MAT.refChamp and MAT.numClubDom=".$ndom."
    and MAT.numJournee=".$njour."
    and MAT.refChamp=".$refch."),
     
    nbDef=(select case when (MAT.scoreDom > MAT.scoreExt) then (nbDef + 1)
                              else nbDef end from tab_match MAT
    where STA.numClub=MAT.numClubExt and STA.refChamp=MAT.refChamp and MAT.numClubDom=".$ndom."
    and MAT.numJournee=".$njour."
    and MAT.refChamp=".$refch."),
     
    nbBp=nbBp+(select MAT.scoreExt from tab_match MAT
    	         where STA.numClub=MAT.numClubExt and STA.refChamp=MAT.refChamp and MAT.numClubDom=".$ndom."
    and MAT.numJournee=".$njour."
    and MAT.refChamp=".$refch."),
     
    nbBc=nbBc+(select MAT.scoreDom from tab_match MAT
    	       where STA.numClub=MAT.numClubExt and STA.refChamp=MAT.refChamp and MAT.numClubDom=".$ndom."
    and MAT.numJournee=".$njour."
    and MAT.refChamp=".$refch.")";

  2. #2
    Fabouney
    Invité(e)
    Par défaut
    Salut,

    j'ai mal à la tête rien qu'en voyant le pathé que tu nous sors.
    dans ce genre de problème il faut y aller pas à pas afficher toute les requêtes et voir si déjà elle sont correctes, ensuite vu le problème que tu évoques, je serais prêt à parier que c'est du fait qu'il manque une condition dans un de tes update ce qui fait que sa update toute la table.

    enfin essaie de faire des test intermédiaires.

    P.S : c'est illisible ton post sans coloration syntaxique ( est ton ami) , et je crains qu'avec ce ne soit guerre mieux ^^.

    Cordialement.

  3. #3
    Membre confirmé Avatar de dream_of_australia
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    167
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2007
    Messages : 167
    Par défaut
    Je suis d'accord avec Fabouney, c'est très dur de déchiffrer ton code...

    Peut-être une piste à explorer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $claext="update tab_stats STA
    SET nbPts=
    (select case when (MAT.scoreDom < MAT.scoreExt) then (nbPts + 4)
    when (MAT.scoreDom = MAT.scoreExt) then (nbPts + 2)
    else nbPts+1 end from tab_match MAT
    where STA.numClub=MAT.numClubExt and STA.refChamp=MAT.refChamp and MAT.numClubDom=".$ndom." and MAT.numJournee=".$njour."
    and MAT.refChamp=".$refch."),
    D'après ce que j'ai compris tu mets à jour toute la table ici (mais encore une fois c'est difficile de dire, car ton code n'est pas lisible) parce que tu fais un UPDATE tab_stats STA SET nbPts= (). Pas de condition WHERE sur ton update !

  4. #4
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 55
    Par défaut
    Tout d'abord excusez pour ce message qui je l'avoue est illisible...
    J'ai fait un tas de tests, j'ai mis d'abord à jour les stats de l'équipe domicile via phpMyAdmin tout se passe parfaitement bien. Quand j'exécute la requête pour mettre à jour les stats de l'équipe extérieur, tout est effacé dans la table stats pour laisser place au seul enregistrement de la dernière requête exécutée.
    En tout cas dream_of_australia, en y repensant, c'est vrai qu'il manque peut-être une condition where sur le update, le problème est sûrement du à cela, je vais faire des tests..
    Si vous avez d'autres infos intéressantes qui pourraient m'aider n'hésitez pas..

    Merci à tous.

    Voila un extrait du code en plus clair:


  5. #5
    Membre confirmé Avatar de dream_of_australia
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    167
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2007
    Messages : 167
    Par défaut
    Essaie de mettre un WHERE numClub= ... après ta parenthèse fermante, comme ça il ne mettra à jour que les stats de l'équipe concernée.

  6. #6
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 55
    Par défaut
    Bonsoir à tous, j'ai réussir à résoudre mon problème de requête
    En effet, tu avais raison, il manquait une close where à update
    where STA.numClub=2 and STA.refChamp=1.

    La requête qui mettait à jour les stats de l'équipe extérieure comportait une erreur, c'est pour cela que ca ne fonctionnait pas, merci à vous tous pour vos réponses rapides et efficaces

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

Discussions similaires

  1. Requete UPDATE !!!
    Par fages dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 01/07/2004, 16h52
  2. [SYBASE] optimisation requete UPDATE
    Par metheorn dans le forum Sybase
    Réponses: 8
    Dernier message: 24/05/2004, 17h01
  3. [version] Requete Update avec différentes versions de mySQL
    Par regbegpower dans le forum Requêtes
    Réponses: 2
    Dernier message: 26/01/2004, 17h19
  4. Requete update
    Par gianfare dans le forum Langage SQL
    Réponses: 7
    Dernier message: 10/10/2003, 09h04
  5. [debutante] erreur requete update
    Par LineLe dans le forum ASP
    Réponses: 5
    Dernier message: 12/09/2003, 13h05

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