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 :

prise de tête avec une requete sur 2 tables avec une negation


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 17
    Points : 17
    Points
    17
    Par défaut prise de tête avec une requete sur 2 tables avec une negation
    je suis en train de me prendre la tête j'explique :
    Je suis en train de faire un système de gestion de concours.D'habitude j'arrive a me debrouiller avec les requêtes mais des qu'il est question d'une recherche sur 2 tables lié avec une negation je nage. voilà

    j'ai 2 tables
    la première appelé "concours_question" contient les question du concours
    id:
    id_concours:
    question:

    la deuxième appelé "concours_lesreponses" contient les reponses des utilisateurs
    id:
    id_utilisateur:
    id_question:
    id_concours:
    reponse

    et je voudrais faire une requête ne montrant que les questions aux quels l'utilisateur n'a pas repondu.
    actuellement je fais une requete cherchant toute les question d'un concours et ensuite pour chaque question je refais une requete verifiant si cet utilisateur a repondu ou pas... mais ça fait lourd en requête. N'y a t'il pas moyen de faire ça en une seul requete ?
    Merci d'avance pour vos conseilles ..



    [Titre édité par Maximilian]

  2. #2
    Membre régulier
    Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2003
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2003
    Messages : 94
    Points : 116
    Points
    116
    Par défaut
    Bonjour,

    Cette requête doit répondre à ton besoin en ne s'appuyant que sur les utilisateurs qui ont joué au moins 1 fois (table dérivé = USER)


    SELECT USER.id_utilisateur, Q.id
    FROM concours_question Q,
    (SELECT id_utilisateur FROM concours_lesreponses group by 1) USER
    LEFT OUTER JOIN concours_lesreponses R on Q.id = R.id_question and USER.id_utilisateur = R.id_utilisateur and Q.id_concours = R.id_concours
    where R.id_question is NULL and R.id_utilisateur is NULL

    si tu as une table d'utilisateur, il suffit d'enlever le code qui construit la vue en ligne USER.

    Cette requête fonctionne en 4.1 et plus
    Pour 1 fonctionnement en 4.0, il faut faire en 2 temps en commençant par la création d'1 table USER.

    En utilisant une requête basée sur NOT EXISTS, on obtient les mêmes résultats.

    Cordialement

    Selecta

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 17
    Points : 17
    Points
    17
    Par défaut
    Merci beaucoup ! Je crois que j'ai compris je vais essayé ça !

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 17
    Points : 17
    Points
    17
    Par défaut
    ça marche super sauf qu'il faut que l'utilisateur ai déjà repondu a une question sinon ça n'affiche aucune Question
    voilà la requête exacte utilisé

    SELECT USER.id_user, Q.id, Q.question
    FROM concours_questions Q,
    (SELECT id_user FROM concours_reponses group by 1) USER
    LEFT OUTER JOIN concours_reponses R on Q.id = R.id_question and USER.id_user = R.id_user and Q.id_concours = R.id_concours
    where R.id_question is NULL and R.id_user is NULL

    Que faut il faire pour que si un utilisateur n'ai repondu a aucune question je puisse afficher toute les reponses ?

    Autre question si je veux rajouter un where id_user pour voir les questions que pour 1 utilisateur ?

    Un grand merci d'avance.

  5. #5
    Membre régulier
    Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2003
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2003
    Messages : 94
    Points : 116
    Points
    116
    Par défaut
    pour repérer les utilisateurs qui n'ont répondu à aucune question, il te faut obligatoirement et forcément 1 table des UTILISATEURS
    auquel cas tu peux combiner cette requête avec la table de tous les utilisateurs sur les mêmes principes de NON EXISTENCE.

    Pour filtrer sur 1 utilisateur particulier, il fauyt ajouter 1 condition supplémentaire à la clause WHERE générale :
    select ...
    where R.id_question is NULL and R.id_utilisateur is NULL
    and USER.id_utilisateur = 3

    ou
    si tu continues à traiter que ceux qui ont répondu à au moins 1 question il vaut mieux placer la condition dans ce que j'appelle vue en ligne ou table dérivée

    (SELECT id_utilisateur FROM concours_lesreponses where id_utilisateur = 3 group by 1) USER

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

Discussions similaires

  1. Impossible d'envoi une requete sur ma table avec les button
    Par naijik dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 11/05/2015, 23h51
  2. [Doctrine] requete sur 3 tables avec une difference
    Par rib dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 04/02/2011, 11h24
  3. Requête sur 2 tables avec ligne unique sur 2° table ?
    Par gaucthier dans le forum Requêtes
    Réponses: 0
    Dernier message: 17/02/2010, 11h18
  4. aide pour requete sur 2 tables avec clé étranere
    Par richton95 dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/12/2005, 13h32
  5. besoin d'aide -> requete sur 2 tables avec count()
    Par parksto dans le forum Requêtes
    Réponses: 3
    Dernier message: 20/10/2005, 19h06

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