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 :

Problème avec JOIN


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 3
    Par défaut Problème avec JOIN
    Bonjour,

    Mise en contexte rapide. J'ai une série d'items (table g15) sur laquelle les visiteurs de mon site peuvent voter. Certains items ont reçu une mention spéciale (table awards) et je veux le savoir quand j'affiche ma liste d'items.

    Le problème vient du fait que j'ai un item qui a reçu 2 mentions et donc il apparait deux fois dans la table awards ce qui fait en sorte qu'il apparait 2 fois dans le résultat de la requête ci-dessous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT g15.ID,g15.CatID,g15.PoemID,awards.Texte AS award 
    FROM g15 
    LEFT JOIN awards ON g15.PoemID = awards.PoemID AND g15.CatID = awards.CatID

    J'ai essayé de rajouter DISTINCT sur différent champs, sans succès. Y-a-t'il un moyen d'effectuer la jointure de telle sorte que chaque item est retourné uniquement 1 fois malgré le fait qu'il y ait 2 références dans awards?


    Merci beaucoup,


    François.

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 291
    Par défaut
    dans ce cas, lequel des deux awards.Texte faut-il afficher ? n'importe lequel ? le plus récent ? la concaténation des deux ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 3
    Par défaut
    Je serais curieux de savoir comment faire pour tous ces cas.. Ce problème me mystifie depuis quelque temps...


    Merci beaucoup pour ta réponse très rapide.

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 291
    Par défaut
    Pour commence, n'importe lequel (sous MySQL seulement) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT g15.ID, g15.CatID, g15.PoemID, awards.Texte AS award 
    FROM g15 
    LEFT JOIN awards 
      ON g15.PoemID = awards.PoemID AND g15.CatID = awards.CatID
    GROUP BY g15.ID
    (à suivre)

  5. #5
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 291
    Par défaut
    pour continuer dans le facile, le premier et le dernier par ordre alphabétique (SQL standard):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT g15.ID, g15.CatID, g15.PoemID, 
      MIN(awards.Texte) AS premieraward, 
      MAX(awards.Texte) AS dernieraward 
    FROM g15 
      LEFT JOIN awards ON g15.PoemID = awards.PoemID 
        AND g15.CatID = awards.CatID 
    GROUP BY g15.ID
    -- en SQL standard, utiliser :
    --  GROUP BY g15.ID, g15.CatID, g15.PoemID
    La concaténation des différents awards, séparés par des tirets (MySQL seulement) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT g15.ID, g15.CatID, g15.PoemID, 
      GROUP_CONCAT(awards.Texte SEPARATOR ' - ') AS listeawards
    FROM g15 
      LEFT JOIN awards ON g15.PoemID = awards.PoemID 
        AND g15.CatID = awards.CatID
    GROUP BY g15.ID

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 291
    Par défaut
    maintenant, le seul qui soit compliqué, parce qu'il nécessite une sous-requête (SQL standard, MySQL à partir de la version 4.1). Je suppose que tu as une awards.ID en AUTO_INCREMENT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT g15.ID, g15.CatID, g15.PoemID, awards.Texte AS award 
    FROM g15 
      LEFT JOIN awards ON g15.PoemID = awards.PoemID 
        AND g15.CatID = awards.CatID 
        AND awards.ID = ( 
          SELECT MAX(A2.ID) 
          FROM awards AS A2
          WHERE A2.poemID = g15.poemID 
            AND A2.CatID = g15.CatID
          )

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

Discussions similaires

  1. [MySQL] Problème avec JOIN
    Par thibotus01 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 24/08/2011, 13h54
  2. Problème avec LEFT JOIN
    Par Sorgue dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/01/2007, 18h37
  3. [Hibernate]Problème de requete avec "join fetch"
    Par gauloiskiki dans le forum Hibernate
    Réponses: 4
    Dernier message: 21/06/2006, 09h54
  4. [Oracle] problème avec INNER JOIN
    Par Philofish dans le forum Langage SQL
    Réponses: 5
    Dernier message: 15/09/2005, 10h20
  5. Problème avec left outer join
    Par jgfa9 dans le forum Requêtes
    Réponses: 1
    Dernier message: 22/08/2005, 21h07

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