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 :

Sous requête mysql apres jointure


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 18
    Par défaut Sous requête mysql apres jointure
    Bonjour,
    Je me prends la tête pour effectuer (je pense) deux sous requêtes. Si autre méthode plus adaptée. Je suis preneur ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT * FROM `maTable` 
    INNER JOIN EVENEMENTS ON EVENEMENTS.ID_EVENT = maTable.ID_EVENT
    INNER JOIN USERS ON USERS.ID_USER = maTable.ID_USER
    // jusque la tout fonctionne
     
    //sous requetes que je ne sais pas comment rajouter
     (SELECT NAME_TEAM AS NAME_TEAM_DOM FROM TEAM_FOOTBALL WHERE TEAM_FOOTBALL.ID_TEAM_FOOT = EVENEMENTS.ID_TEAM_DOMICILE_EVENT)
     
     (SELECT NAME_TEAM AS NAME_TEAM_EXT FROM TEAM_FOOTBALL WHERE TEAM_FOOTBALL.ID_TEAM_FOOT = EVENEMENTS.ID_TEAM_EXTERIEUR_EVENT)
    La première partie du code fonctionne correctement et m'affiche toutes les informations que je souhaite. Seul problème dans la table EVENEMENT je stocke ID_TEAM_DOMICILE_EVENT et ID_TEAM_EXTERIEUR_EVENT qui correspondent à l'ID_TEAM de la table TEAM_FOOTBALL. Je souhaite récupérer les informations des deux équipes pour les renvoyer dans ma requête. Mais je ne sais pas comment faire. Je m'arrache les cheveux.

    Si je fais un innerjoin sous le premier ca fonctionne mais une erreur pour le deuxieme champ (forcément je veux joindre deux fois la meme table): j'en déduis que ce n'est pas la bonne méthode. Du coup je m'oriente vers les sous requetes.

    Si quelqu'un pouvait m'aider ca serait vraiment cool. En attendant je continue à chercher. J'ai essayé avec UNION mais ne vois pas trop comment les rattacher. Merci par avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Bonjour,

    il faut faire 2 jointures :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT *, DOM.NAME_TEAM AS NAME_TEAM_DOM, EXT.NAME_TEAM AS NAME_TEAM_EXT
    FROM `maTable` 
    INNER JOIN EVENEMENTS ON EVENEMENTS.ID_EVENT = maTable.ID_EVENT
    INNER JOIN USERS ON USERS.ID_USER = maTable.ID_USER
    INNER JOIN TEAM_FOOTBALL DOM ON DOM.ID_TEAM_FOOT = EVENEMENTS.ID_TEAM_DOMICILE_EVENT
    INNER JOIN TEAM_FOOTBALL EXT ON EXT.ID_TEAM_FOOT = EVENEMENTS.ID_TEAM_EXTERIEUR_EVENT

  3. #3
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Il vaut mieux éviter la guerre des étoiles !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 18
    Par défaut Du mal a comprendre
    Merci beaucoup pour vos réponses
    Cinephil : Merci pour la précision. l'* me sert dans l'exemple mais dans la pratique, je te rejoins sur la nécessité de lister les champs.

    punkoff : Merci pour la réponse (rapide en plus), j'ai du mal à comprendre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT *, DOM.NAME_TEAM AS NAME_TEAM_DOM, EXT.NAME_TEAM AS NAME_TEAM_EXT
    
    INNER JOIN TEAM_FOOTBALL DOM ON DOM.ID_TEAM_FOOT = EVENEMENTS.ID_TEAM_DOMICILE_EVENT
    
    INNER JOIN TEAM_FOOTBALL EXT ON EXT.ID_TEAM_FOOT = EVENEMENTS.ID_TEAM_EXTERIEUR_EVENT
    le DOM et le EXT qui ne sont pas des tables. Est-ce pour l'exemple ? ou est ce la syntaxe. Je regarde la doc mais ne comprends pas trop. Et l'utilisation dans le Inner Join : TEAM_FOOTBALL DOM : le DOM est genre un ALIAS pour éviter la confusion. Du coup il l'a considère comme une autre jointure ? C'est ca ?
    Donc EXT.ID_TEAM = TEAM_FOOTBALL.ID_TEAM pour ma jointure requête EXT ?

    Merci encore je testerai ce soir le code en rentrant du boulot

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    c'est un alias.

    ca permet de renommer un objet (ici une table) et rendre le code plus lisible

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 18
    Par défaut MERCI
    Je viens de tester en rentrant à l'instant du travail.
    Tout fonctionne. Merci encore pour votre contribution heureusement que vous étiez la. Il suffit de pas grand chose pour faire aboutir ses projets.

    Version CodeIgniter pour ceux que ca intéressent (ma modeste contrib)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $this->db->select('*, DOM.NAME_TEAM AS NAME_TEAM_DOM, EXT.NAME_TEAM AS NAME_TEAM_EXT');
    		$this->db->from('maTable');
    		$this->db->join('USERS', 'USERS.ID_USER = maTable.ID_USER');
    		$this->db->join('EVENEMENTS', 'EVENEMENTS.ID_EVENT = maTable.ID_EVENT');
    		$this->db->join('TEAM_FOOTBALL DOM', 'DOM.ID_TEAM_FOOT = EVENEMENTS.ID_TEAM_DOMICILE_EVENT');
    		$this->db->join('TEAM_FOOTBALL EXT', 'EXT.ID_TEAM_FOOT = EVENEMENTS.ID_TEAM_EXTERIEUR_EVENT');

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

Discussions similaires

  1. [MySQL] Requête MySQL avec jointure
    Par vainuiz dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 07/11/2011, 22h46
  2. Remplacer les sous requêtes grâce aux jointures
    Par onizuka_metal dans le forum Requêtes
    Réponses: 6
    Dernier message: 25/09/2009, 17h48
  3. Réponses: 2
    Dernier message: 26/03/2008, 09h49
  4. Remplacer une sous-requête par une jointure
    Par MPQuatre dans le forum Requêtes
    Réponses: 6
    Dernier message: 05/12/2007, 18h28
  5. sous requête mysql
    Par realkilla dans le forum Requêtes
    Réponses: 7
    Dernier message: 06/08/2007, 12h54

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