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 :

Jointure et Recherche sur deux tables


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 46
    Points : 25
    Points
    25
    Par défaut Jointure et Recherche sur deux tables
    Bonjour a tous,

    je travaille sur MySQL 5.0 et j'ai un petit soucis pour une requete.

    J'ai deux tables auteurs (table où sont répertoriés toutes les informations relatives à l'auteur) et articles tables où sont répertoriés toutes les informations relatives à l'article, dont son auteur).

    Je fais une requete pour avoir tous les auteurs et je voudrais dans une colonne savoir si l'auteur a déjà écrit un article ou pas encore (non si pas encore écrit ou alors un nombre pour savoir combien il en a déjà écrit).

    Je n'arrive pas a le faire en une seule requete ...

    Pourriez vous m'aider svp,

    Merci a tout ceux qui pourront m'aider

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Il faut utiliser une jointure externe de Auteurs vers Articles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT au.AU_Nom AS NomAuteur, COUNT(ar.id) As NbArticles
    FROM auteurs AS au
    LEFT OUTER JOIN articles AS ar ON au.AU_Id = ar.AR_IdAuteur
    GROUP BY au.AU_Id
    ORDER BY au.AU_Nom
    Principe à adapter à tes données.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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 !

  3. #3
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 46
    Points : 25
    Points
    25
    Par défaut
    Merci CinePhil d'abord pour ton aide.

    J'ai fais, avec ce que tu m'as dis, ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT DISTINCT pk_userId, userName, ETA.pk_userAccess, COUNT(ETP.fk_userId), COUNT(ETR.fk_userId), GROUP_CONCAT( DISTINCT pk_userAccess
    ORDER BY ETA.pk_userAccess DESC
    SEPARATOR ' ' ) AS userAccess
    FROM eur_t_user as ETU
    LEFT OUTER JOIN eur_t_paper as ETP ON ETP.fk_userId=ETU.pk_userId
    LEFT OUTER JOIN eur_t_access as ETA ON ETA.fk_userId=ETU.pk_userId
    LEFT OUTER JOIN eur_j_user_note as ETR ON ETR.fk_userId=ETU.pk_userID
    GROUP BY pk_userId
    ORDER BY userLastName ASC
    LIMIT 0 , 10
    Je voudrais donc savoir sur 3 colonnes différentes:
    - les différents roles de l'utilisateur (auteur, moderateur ... avec le Group_concat) => c'est OK
    - le nombre d'article écrit par utilisateur
    - le nombre de note donné par utilisateur

    Au final, mes deux dernieres colonnes se trouvent identique: le résultat est en fait la multiplication du nombre de note par le nombre d'article par le nombre de role de l'utilisateur.

    Comment bien séparez les colonnes pour avoir les bons résultats ....

    Merci d'avance

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Dans le SELECT, tu demandes à la fois ETA.pk_userAccess et le GROUP CONCAT de la même colonne. Ca m'étonnerait que ça donne le résultat escompté ! Supprime le premier sinon tu auras une ligne par pk_userAccess et le GROUP CONCAT ne contiendra qu'un élément.

    Au passage, je t'encourage à préfixer toutes les colonnes avec les alias pour ne pas créer d'évnetuelles ambigüités insilvables par le SGBD et pour faciliter la compréhension de la requête.
    Par exemple, on ne sait pas de quelle(s) table(s) viennent les colonnes pk_userID et userName ni si elles sont en dépendance fonctionnelle directe. Si ce n'est pas le cas, il faut mettre les deux colonnes dans le GROUP BY sinon la valeur retrounée dans la colonne userName sera aléatoire.

    Pour le reste, sans la structure des tables, difficile de savoir pourquoi les deux COUNT donneraient les mêmes résultats.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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 !

Discussions similaires

  1. [AC-2010] recherche sur deux tables
    Par mcaiki dans le forum VBA Access
    Réponses: 1
    Dernier message: 19/08/2011, 15h24
  2. Recherche sur deux tables simultanément
    Par neojick dans le forum Requêtes
    Réponses: 5
    Dernier message: 05/11/2008, 11h55
  3. Recherche sur deux tables
    Par Kanagawa dans le forum Débuter
    Réponses: 6
    Dernier message: 03/11/2008, 19h35
  4. Jointures sur deux tables
    Par spirou dans le forum Requêtes
    Réponses: 6
    Dernier message: 31/05/2006, 15h46
  5. 2 Count() sur deux tables en jointures gauches
    Par Alexandre T dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/09/2003, 16h53

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