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

Langage SQL Discussion :

Update et double jointure


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Update et double jointure
    Bonjour bonjour!

    Après des années de développement autodidacte je me décide enfin à m'inscrire sur un forum sérieux pour qu'on puisse m'assister un peu.

    Bon en réalité j'ai deux souci, l'un technique et l'autre SQL, mais c'est dans l'immédiat le souci SQL qui m'intéresse.

    Je développe depuis deux ans un MMO par navigateur, et il faut dire que l'optimisation n'a pas été mon fort (ça a été mon bac a sable et le code change tout le temps ^^). Aujourd'hui il compte environ 35000 lignes de codes et une petite base de données (115 tables pour 480.000 enregistrements). Ça c'est pour le décor.

    J'aurais besoin d'aide pour un petit update. Voici la structure des tables concernées (les champs utiles uniquement)

    Tables

    Personnage
    id
    arme

    Inventaire
    id
    id_perso
    id_objet

    Objets
    id
    nom

    Jointures

    personnage.arme = inventaire.id
    inventaire.id_objet = objets.id
    personnage.id = inventaire.id_perso (pense pas qu'elle serve celle la)

    Voila ce que je voudrais faire: mettre arme à 0 pour un certain id de la tables objets.

    Voila ce que j'ai tenté pour le moment:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    UPDATE personnage
    SET arme = 0
    FROM inventaire 
    LEFT JOIN personnage ON personnage.arme = inventaire.id 
    INNER JOIN objets ON objets.id = inventaire.id_objet
    WHERE objets.id = 551
    Une idée pour un novice du SQL?

    Concernant mon deuxième souci, c'est l'occupation processeur de mon processus "mysqld" sur mon debian, 180% environ pour 35 utilisateurs en simultané... C'est normal? (Serveur: Core2Duo, 3Go de ram, 100mbit/s, 500Go de disque)

    Merci d'avance!

    EDIT: Je précise que je suis en mySQL 5, et que je suis peut être pas au bon endroit, feel free to move me.

  2. #2
    Membre confirmé Avatar de juvamine
    Profil pro
    Chef de projet MOA
    Inscrit en
    Mai 2004
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2004
    Messages : 414
    Points : 502
    Points
    502
    Par défaut
    réponse:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    UPDATE personnage
           RIGHT JOIN inventaire
           ON     personnage.arme = inventaire.id
           INNER JOIN objets
           ON     objets.id = inventaire.id_objet
           SET    arme      = 0
    WHERE  objets.id        = 551
    Juvamine

  3. #3
    Candidat au Club
    Inscrit en
    Avril 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Après un passage sur le chat, quelqu'un m'a proposé la bonne réponse (juvamine, merci à lui)!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    UPDATE personnage
           RIGHT JOIN inventaire
           ON     personnage.arme = inventaire.id
           INNER JOIN objets
           ON     objets.id = inventaire.id_objet
           SET    arme      = 0
    WHERE  objets.id        = 551
    La voila, pour ceux qui seraient dans le même cas que moi.

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Une autre solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    UPDATE personnage
    SET arme = 0
    WHERE EXISTS (select null
                  FROM inventaire 
                  INNER JOIN objets
                    ON objets.id = inventaire.id_objet
                  WHERE personnage.arme = inventaire.id 
                  AND objets.id = 551)

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

Discussions similaires

  1. Update et double jointure
    Par Walanup dans le forum Développement
    Réponses: 4
    Dernier message: 19/07/2012, 17h06
  2. UPDATE multiple avec jointure
    Par PyRoFlo dans le forum Requêtes
    Réponses: 6
    Dernier message: 25/05/2006, 15h56
  3. requete avec double jointure externe
    Par cdu dans le forum Langage SQL
    Réponses: 8
    Dernier message: 04/01/2006, 14h54
  4. Doubles jointures externes....
    Par HPJ dans le forum Langage SQL
    Réponses: 2
    Dernier message: 16/11/2004, 15h28
  5. [jointure]requete possible de double jointure entre 2 tables
    Par akira_le_gaucher dans le forum Langage SQL
    Réponses: 4
    Dernier message: 11/05/2004, 15h03

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