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] jointure qui exclut


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Ingénieur développement logiciel
    Inscrit en
    Septembre 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciel

    Informations forums :
    Inscription : Septembre 2007
    Messages : 28
    Par défaut [Jointure] jointure qui exclut
    Bonjour,

    Je monte un quizz sur un site de fans de mangas, et je me retrouve confronté à un petit problème que je préférerai traiter en MySQL plutot qu'en PHP :

    J'ai une base contenant mes questions du quizz
    (`Questions_quizz`.`id_question_quizz` comme Primary Key)
    et une base qui enregistres les réponses de chaque utilisateur au quizz
    (`Quizz_resultats`.`id_question` en couple unique avec `Quizz_resultats`.`id_user`)

    Ma Question est que je voudrais récupérer une question de quizz au hasard, moins celles que l'utilisateur a déjà faites.

    Pour l'instant mon code n'en prend qu'une au hasard :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT * FROM `Questions_quizz` 
    		WHERE difficulte=3
    		ORDER BY RAND() 
    		LIMIT 1
    j'ai voulu faire une jointure, et ne sélectionner que ceux dont ceux de la BDD résultats sont différents de la bdd originale et qui sont égaux à celle de notre bdd
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    AND `Questions_quizz`.`id_question_quizz` <> `Quizz_resultats`.`id_question`
    AND `Quizz_resultats`.`id_user` = 42
    Mais en fait c'est complétement stupide : rien n'est sélectionné...
    J'ai regardé du côté des jointures, la solution devrait y être mais j'ai l'impression que ca ne fait que créer des nouveaux champs, pas en enlever!

    En espérant recevoir un conseil, ca m'aiderait fortement!
    Merci encore!
    Paul

  2. #2
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    Avec une petite jointure externe, effectivement
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT DISTINCT q.id_question_quizz, autresnomsdecolonnesmaispasetoilemerci
    FROM Questions_quizz q
    LEFT JOIN Quizz_resultats r
    ON  q.id_question_quizz=r.id_question
    AND r.id_user = 42
    WHERE r.id_user IS NULL
    ORDER BY RAND() 
    LIMIT 1
    Pourqoi pas SELECT *
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Membre averti
    Profil pro
    Ingénieur développement logiciel
    Inscrit en
    Septembre 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciel

    Informations forums :
    Inscription : Septembre 2007
    Messages : 28
    Par défaut
    Waou Merci encore pour la solution, effectivement je n'avais pas du tout pensé à matcher dans le sens IS NULL.
    C'est un peu mon problème en SQL, j'ai du mal parfois à "voir un autre point de vue".


    pour le SELECT (*), effectivement au dessus de 10champs récupérés je fais mon fainéant, à chaque fois je me dis que je reviendrais dessus quand tout marche mais...parfois j'oublie
    Je vais de ce pas rectifier pour mes classes php

    Merci encore pour ta précieuse aide!!
    Ca m'a vraiment bien aidé!
    *happy happy*

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

Discussions similaires

  1. Jointure externe, qui ne retourne rien.
    Par guitou0 dans le forum SQL
    Réponses: 11
    Dernier message: 30/04/2008, 13h35
  2. Jointure simple qui ne passe pas par les index ?!
    Par souch dans le forum Oracle
    Réponses: 13
    Dernier message: 24/07/2007, 17h03
  3. Problème jointure gauche qui ne passe plus sous MySQL 5
    Par OuiOui007 dans le forum Requêtes
    Réponses: 3
    Dernier message: 21/09/2006, 10h33
  4. jointure externe qui retourne 1 ligne par enregistrement
    Par goony dans le forum Langage SQL
    Réponses: 5
    Dernier message: 11/05/2006, 17h51
  5. Jointure externe qui ne fonctionne pas
    Par Guizz dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/02/2004, 12h26

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