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

Requêtes MySQL Discussion :

Can't specify target for update in FROM clause


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4
    Par défaut Can't specify target for update in FROM clause
    Bonjour,

    J'ai un soucis avec une de mes requêtes SQL que j'utilise pour un jeu que je code.

    Je veux faire en sorte de mettre à jour le score du joueur lorsqu'il se déconnecte.
    Pour faire ca je dois faire la somme des points que rapportent les défis que le joueur à fait et la mettre dans mon champ score de ma table joueurs.

    Lorsque j'effectue ma requête, j'obtient l'erreur "Can't specify target for update in FROM clause", je comprends cette erreur, je ne peux pas modifier une table et en même temps effectuer un SELECT dessus.

    J'ai déjà regardé plusieurs postes sans vraiment trouver comment faire: https://www.developpez.net/forums/d4...n-from-clause/

    Mais ma question est comment est-ce que je peux faire pour passer outre ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    UPDATE joueurs AS p1 
    SET p1.SCORE = 
    (
        SELECT SUM(MODFISCORE) 
        FROM joueurs_defis NATURAL JOIN defis_typesimpacts 
        WHERE ETAT='2' AND ID_JOUEUR =(SELECT p3.ID_JOUEUR FROM joueurs AS p3 WHERE p3.PSEUDO ="Testeur")
    )
    WHERE p1.ID_JOUEUR = 
    (
         SELECT p2.ID_JOUEUR
         FROM joueurs AS p2 
         WHERE p2.PSEUDO = "Testeur"
    )
    J'espère avoir été assez clair. Merci

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Il suffit de faire plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    UPDATE  joueurs AS p1 
    SET p1.score = 
            (   SELECT  SUM(modfiscore) 
                FROM    joueurs_defis
                    NATURAL JOIN
                        defis_typesimpacts 
                WHERE   etat      = '2'
                    AND ???.id_joueur = p1.id_joueur
            )
    WHERE   p1.pseudo = 'Testeur'
    ;
    Il manque juste le nom ou l'alias de la table dans laquelle se trouve la colonne id_joueur dans la sous-requête.

    C'est d'ailleurs une bonne pratique, dès qu'il y a plus d'une table dans une requête, de spécifier pour chaque colonne la table à laquelle elle appartient.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4
    Par défaut
    Parfait, c'était pas très compliqué enfaite, merci

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 15/03/2012, 17h31
  2. Réponses: 2
    Dernier message: 26/04/2011, 09h58
  3. Can't specify target in FROM clause
    Par Linio dans le forum Requêtes
    Réponses: 5
    Dernier message: 10/12/2010, 15h00
  4. Réponses: 2
    Dernier message: 17/03/2008, 15h38
  5. Réponses: 3
    Dernier message: 07/03/2008, 14h31

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