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 :

Multiples Jointures qui coince...


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 2
    Par défaut Multiples Jointures qui coince...
    Bonjour. Je fais actuellement un site perso pour un jdr. Et là j’ai un gros soucis pour récupérer mes données :
    - Chaque joueur connaît des sorts.
    - Pour lancer les dits sorts, il faut des focus.
    - On peut trouver un ou plusieurs sorts sur chaque focus.

    Je veux connaîte, pour un joueur X, l’ensemble des sorts qu’il connaît et le nom éventuel du focus (sinon « null »)

    Maintenant les tables :

    SORT_JR
    id_pj int(10) not_null
    id_sort int(10) not_null

    FOCUS_JR
    id_pj int(10) not_null
    id_focus int(10) not_null

    FOCUS_SORT
    id_focus int(10) not_null
    id_sort int(10) not_null

    J'arrive donc à obtenir la liste des sorts à condition qu'il y ai un focus, ou l'inverse la liste des sorts à condition qu'il n'y ai pas de focus. Mais pour obtenir les deux à la fois, avec "null" lorsqu'il n'y a pas de focus genre :

    id_pj id_sort id_focus
    2 1 3
    2 6 6
    2 11 10
    2 3 9
    2 8 6
    2 1 null

    et bien ça, je coure toujours.

  2. #2
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Par défaut
    Euh... moi pas comprendre tes histoires de sorts et de focus, mais la jointure qu'il te faut, c'est du type LEFT OUTER JOIN.
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  3. #3
    Candidat au Club
    Inscrit en
    Mars 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 2
    Par défaut
    Pour être plus clair, voici le type de requete que je tente, et qui ne passe pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT T1.id_pj,
           T1.id_sort,
           T4.id_focus
    FROM   SORT_JR AS T1
           LEFT OUTER JOIN (SELECT T2.id_pj AS id_pj,
                                   T3.id_sort AS id_sort,
                                   T2.id_focus AS id_focus
                            FROM   FOCUS_JR AS T2,
                                   FOCUS_SORT AS T3
                            WHERE  T2.id_focus = T3.id_focus) AS T4
             ON (T4.id_pj = T1.id_pj
                 AND T4.id_sort = T1.id_sort)
    WHERE  T1.id_pj = X
    Je fais donc un premier recoupement pour avoir la totalité des sorts contenues dans les focus de l'intégralité des joueurs.
    Puis après une jointure externe pour avoir au final : pour un joueur donné, l'ensemble des sorts qu'il connait et l'id du focus ou null.

  4. #4
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Par défaut


    Citation Envoyé par Zeprecheur
    Je fais donc un premier recoupement pour avoir la totalité des sorts contenues dans les focus de l'intégralité des joueurs.
    Ca c'est lourd ! (il ne vaut mieux pas que tu n'aies trop de joueurs. )



    Citation Envoyé par Zeprecheur
    pour avoir au final : pour un joueur donné, l'ensemble des sorts qu'il connait et l'id du focus ou null.
    Dans ce cas il y a peut-être plus simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT
      T1.id_pj, T1.id_sort, T3.id_focus 
     
    FROM SORT_JR as T1
     
    INNNER JOIN FOCUS_SORT as T2
    USING id_sort 
     
    LEFT OUTER JOIN FOCUS_JR as T3
    ON (T3.id_focus = T2.id_focus AND T3.id_pj = T1.id_pj)
     
    WHERE T1.id_pj = X
    (en même temps, je ne suis pas sûr d'avoir compris toutes les règles... )
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

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

Discussions similaires

  1. Jointure qui réagit bizarrement
    Par gunth dans le forum Requêtes
    Réponses: 3
    Dernier message: 16/02/2007, 16h59
  2. Réponses: 16
    Dernier message: 21/06/2006, 19h45
  3. jointure qui ne fonctionne pas
    Par zulot dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/06/2006, 14h53
  4. Un double Select doublé d un "for each" qui coince
    Par Sparal dans le forum Access
    Réponses: 4
    Dernier message: 09/02/2006, 14h00
  5. [SQL] Requête à jointure qui ne fonctionne pas
    Par Bensor dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/12/2004, 16h10

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