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 :

Equivalent de fonction "dans tout" dans une requête


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 91
    Points : 58
    Points
    58
    Par défaut Equivalent de fonction "dans tout" dans une requête
    Bonjour,

    Voilà je dois gérer un système de QCM avec Auteurs, questions, réponses dont le schéma de la base de données est comme suit :

    http://yfrog.com/65capturelep


    Mon soucis est que je dois réussir à lister les auteurs dont les questions 1 OU 2 font parties de TOUS les QCM de l'auteur.

    Par exemple, si Dupont a fait 2 QCM, l'un avec la question 1, l'autre avec la question 2 alors on l'affiche dans le résultat.
    Si Dupond a fait 2 autres QCM, l'un avec la question 2 et l'autre avec la question 9, alors on ne l'affiche pas dans la sélection car il n'y a pas la question 1 ou 2 dans les deux QCM créés par Dupond...

    Voilà le début d'une requête que j'ai fait, mais je n'arrive pas à aller plus loin, je ne vois pas comment dire "Regarde dans tous les QCM de l'auteur si les questions 1 OU 2 sont présentes".

    Voilà ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    SELECT DISTINCT Auteur
    FROM INFOQCM
    INNER JOIN QCM ON INFOQCM.NumQCM = QCM.NumQCM
    INNER JOIN COMPOQCM ON QCM.NumQCM = COMPOQCM.NumQCM
    WHERE COMPOQCM.NumQCM
    IN (
     
    SELECT COMPOQCM.NumQCM
    FROM COMPOQCM
    WHERE COMPOQCM.NumQuestion =1
    )
    OR COMPOQCM.NumQCM
    IN (
     
    SELECT COMPOQCM.NumQCM
    FROM COMPOQCM
    WHERE COMPOQCM.NumQuestion =2
    )
    GROUP BY Auteur

    Pourriez-vous m'aider ?


    Merci d'avance.

    Bonne journée.

  2. #2
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Il faudrait que tu donnes la description de tes tables parce que les noms de celles-ci et des colonnes ne sont pas toujours très explicites.
    D'où vient la colonne Auteur ? Quelle table permet de rattacher un QCM et son auteur ?
    Que contiennent les tables ?

    Pour résoudre ton problème, décompose-le.
    lister les auteurs dont les questions 1 OU 2 font parties de TOUS les QCM de l'auteur.
    Fais une sous-requête comptant le nombre de QCM par auteur.
    Quelque chose dans le genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Auteur, COUNT(*) AS nb_QCM
    FROM QCM
    GROUP BY Auteur
    Compte maintenant par auteur le nombre de QCM où figurent les questions 1 ou 2 et ne conserve que les auteurs dont ce nombre est égal au nombre total de questionnaires de l'auteur. Ça devrait ressembler à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT q.Auteur
    FROM COMPOQCM AS c
    INNER JOIN QCM AS q ON q.NumQCM = c.NumQCM
    WHERE c.NumQuestion IN (1,2)
    GROUP BY q.Auteur
    HAVING COUNT(DISTINCT q.NumQCM) = 
    (
        SELECT Auteur, COUNT(*) AS nb_QCM
        FROM QCM
        GROUP BY Auteur
    )

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 91
    Points : 58
    Points
    58
    Par défaut
    Merci beaucoup grâce à tes explications et tes exemples j'ai pu enfin me débloquer et résoudre mon soucis.

    Merci infiniment pour les précieuses aides et indices.

    A bientôt !

    Cordialement,

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/05/2012, 02h57
  2. [AC-2007] Intégrer fonction définie dans module dans le critère d'une requête
    Par atech dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 13/01/2011, 11h04
  3. Réponses: 8
    Dernier message: 27/08/2009, 14h01
  4. [SQL] Tout supprimé dans tout mes champ tout remettre à 0
    Par snakejl dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 01/06/2006, 18h12

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