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 :

requete SQL de sélection


Sujet :

Requêtes MySQL

  1. #1
    Membre confirmé
    Profil pro
    ingé sys
    Inscrit en
    Avril 2004
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ingé sys

    Informations forums :
    Inscription : Avril 2004
    Messages : 156
    Par défaut requete SQL de sélection
    salut, j'ai une requete qui me pose problemes!
    des membres s'inscrivent sur mon site, répondent à un quizz.
    Le quizz est composé de questions, parmi ces questions, il y a des propositions de réponses mais une seule est bonne.
    Ils répondent et les résultats sont enregistrés dans une base de données.

    Jaimerais tirer au sort le vainqueur, mais j'ai déjà su mal à trier ceux qui ont du données les bonnes réponses.

    voilà ce ue j'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT * from reponse,resultat,membre,concours,membre_has_concours
    					where valeur_rep=1
    					and idREPONSE=REPONSE_idREPONSE
    					and idMEMBRE=resultat.MEMBRE_idMEMBRE
    					and membre_has_concours.MEMBRE_idMEMBRE=idMEMBRE
    					and membre_has_concours.CONCOURS_idCONCOURS=idCONCOURS
    					and idCONCOURS=7
    C'est ma requete de sélection de ceux qui ont donnés les bonnes réponses.
    Le souci est que pour gagner il faut les 3 bonnes réponses, mais avec ma requete, il me donne aussi ceux qui n'ont donné qu'une bonne réponse.

    Comment je règle çà svp ?

    Voila le schéma de bdd si çà peut vous aider


    merci d'avance!

  2. #2
    Membre averti Avatar de Macfurp
    Inscrit en
    Octobre 2006
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 62
    Par défaut
    Bonjour,
    ci-joint une possibilité, je n'ai pas eu le temps de la tester, il faudrait que je puisse disposer du DDL, etc... mais ça peut donner des idées.

    En partant du principe que tu ne souhaites finalement récupérer que le nom et l'identifiant des vainqueurs et que tu ais 3 concours avec 3 réponses différentes à contrôler :

    SELECT idMEMBRE, nom_mb
    FROM MEMBRE, COUNT (Nb_REP_OK) AS Gagnants
    FROM
    (

    SELECT idMEMBRE, nom_mb
    FROM MEMBRE, 1 AS Nb_REP_OK
    WHERE EXISTS
    ( SELECT 'X' FROM
    reponse,resultat,concours,membre_has_concours
    WHERE valeur_rep=1 AND idCONCOURS=7
    AND idREPONSE=REPONSE_idREPONSE
    AND idMEMBRE=resultat.MEMBRE_idMEMBRE
    AND membre_has_concours.MEMBRE_idMEMBRE=idMEMBRE
    AND membre_has_concours.CONCOURS_idCONCOURS=idCONCOURS )
    UNION ALL
    SELECT idMEMBRE, nom_mb
    FROM MEMBRE, 1 AS Nb_REP_OK
    WHERE EXISTS
    ( SELECT 'X' FROM
    reponse,resultat,concours,membre_has_concours
    WHERE valeur_rep=1 AND idCONCOURS=9
    AND idREPONSE=REPONSE_idREPONSE
    AND idMEMBRE=resultat.MEMBRE_idMEMBRE
    AND membre_has_concours.MEMBRE_idMEMBRE=idMEMBRE
    AND membre_has_concours.CONCOURS_idCONCOURS=idCONCOURS )
    UNION ALL
    SELECT idMEMBRE, nom_mb
    FROM MEMBRE, 1 AS Nb_REP_OK
    WHERE EXISTS
    ( SELECT 'X' FROM
    reponse,resultat,concours,membre_has_concours
    WHERE valeur_rep=5 AND idCONCOURS=5
    AND idREPONSE=REPONSE_idREPONSE
    AND idMEMBRE=resultat.MEMBRE_idMEMBRE
    AND membre_has_concours.MEMBRE_idMEMBRE=idMEMBRE
    AND membre_has_concours.CONCOURS_idCONCOURS=idCONCOURS )
    ) AS TOTO
    GROUP BY idMEMBRE, nom_mb
    HAVING COUNT(Nb_REP_OK) = 3;


    Je ne suis pas bien sur de la syntaxe... c'est aussi un peu laborieux j'en conviens et on pourrait certainement placer des CASES à la place des UNION ALL.
    Bon courage

  3. #3
    Membre confirmé
    Profil pro
    ingé sys
    Inscrit en
    Avril 2004
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ingé sys

    Informations forums :
    Inscription : Avril 2004
    Messages : 156
    Par défaut
    merci pour ta réponse mais jai du mal !!

    avec ta methode jai testé

    selectionner ceux qui ont répondu bon a la question 1
    union
    selectionner ceux qui ont répondu bon a la question 2
    union
    selectionner ceux qui ont répondu bon a la question 3

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT distinct membre_idmembre
    FROM resultat,reponse
    WHERE reponse_idreponse = 17
    and valeur_rep=1
    union all
    SELECT distinct membre_idmembre
    FROM resultat,reponse
    WHERE reponse_idreponse = 20
    and valeur_rep=1
    union all
    SELECT distinct membre_idmembre
    FROM resultat,reponse
    WHERE reponse_idreponse = 23
    and valeur_rep=1
    Il maffiche les bon idmembres mais moi j'aimerai ceux qui ont bon aux 3 !
    Dans mon cas, il m'affiche celui qui a bon aux 3 questions et un mec qui a bon à une question !

    Comment je peux résoudre çà ?
    Comme les bonnes réponses sont initialisés à 1 (TRUE), j'ai pensé a compté les valeurs et à la fin celui qui a 3 est affiché !
    c'est un peu ce qui tu as fais, mais j'arrive pas !
    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
     SELECT idMEMBRE, nom_mb
    FROM MEMBRE, COUNT( 'valeur_rep' )
    WHERE (
     
    SELECT DISTINCT membre_idmembre
    FROM resultat, reponse
    WHERE reponse_idreponse =17
    AND valeur_rep =1
    UNION ALL SELECT DISTINCT membre_idmembre
    FROM resultat, reponse
    WHERE reponse_idreponse =20
    AND valeur_rep =1
    UNION ALL SELECT DISTINCT membre_idmembre
    FROM resultat, reponse
    WHERE reponse_idreponse =23
    AND valeur_rep =1
    )
    HAVING count( 'valeur_rep' ) =3
    LIMIT 0 , 30
    Voilà ce que j'ai testé mais ca me met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'COUNT( 'valeur_rep' )  WHERE (    SELECT distinct membre_idmembre  FROM resultat' at line 1
    Comment je peux résoudre çà ?

    Merci d'avance

  4. #4
    Membre averti Avatar de Macfurp
    Inscrit en
    Octobre 2006
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 62
    Par défaut
    B'jour,

    Il me semble qu'un GROUP BY est nécessaire ici ne serait-ce que pour pouvoir effectuer le COUNT sur les colonnes sélectionnées et il faudrait rajouter des critère de jointures entre les tables resultat et réponse sinon ça risque de ramer un peu à l'exécution.

    Peux-tu essayer cette requète :

    SELECT membre_idmembre, COUNT( *)
    FROM (
    SELECT DISTINCT membre_idmembre
    FROM resultat, reponse
    WHERE idREPONSE=REPONSE_idREPONSE
    AND reponse_idreponse =17
    AND valeur_rep =1
    UNION ALL SELECT DISTINCT membre_idmembre
    FROM resultat, reponse
    WHERE AND idREPONSE=REPONSE_idREPONSE
    AND reponse_idreponse =20
    AND valeur_rep =1
    UNION ALL SELECT DISTINCT membre_idmembre
    FROM resultat, reponse
    WHERE AND idREPONSE=REPONSE_idREPONSE
    AND reponse_idreponse =23
    AND valeur_rep =1
    ) as Tabx
    GROUP BY membre_idmembre
    HAVING count(*) =3

    si ça fonctionne ça doit te permettre d'obtenir déjà les identifiants des membres qui ont les 3 réponses.

    A+

  5. #5
    Membre confirmé
    Profil pro
    ingé sys
    Inscrit en
    Avril 2004
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ingé sys

    Informations forums :
    Inscription : Avril 2004
    Messages : 156
    Par défaut
    merci beaucou çà marche !!!!!!!!!!!!!!!
    merci enormement !!
    et j'ai reussi aussi le choix aleatoire !!

    merci infiniment !

  6. #6
    Membre confirmé
    Profil pro
    ingé sys
    Inscrit en
    Avril 2004
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ingé sys

    Informations forums :
    Inscription : Avril 2004
    Messages : 156
    Par défaut
    Salut c'est encore moi !!!

    Avec cette requete est il possible de compter le nombre de personnes qui ont eu bon ?

    J'ai essayé divers requetes mais çà passe pas

    Comment faire ?
    merci d'avance!

Discussions similaires

  1. [XL-2007] Requete SQL en VBA sur "Sélection" d'un feuille de données ?
    Par Cyborg dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 09/12/2011, 08h16
  2. requete sql sélection nombre impair
    Par The_Pretender dans le forum Requêtes
    Réponses: 4
    Dernier message: 17/10/2008, 14h58
  3. Problème Requete SQL et QuickReport
    Par arnaud_verlaine dans le forum C++Builder
    Réponses: 7
    Dernier message: 07/01/2004, 09h31
  4. Paramètre requete SQL (ADOQuery)
    Par GaL dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/07/2002, 11h24
  5. Resultat requete SQL
    Par PierDIDI dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/07/2002, 13h43

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