Bonjours,
J'apprends actuellement le langage SQL et dans le cadre d'un site que je réalisais je me suis retrouvé face à un problème que je n'ai pas réussis à résoudre.
Je m'explique. J'ai réalisé une application dans laquelle des utilisateurs peuvent organiser des rencontres entre-eux. J'ai donc une table avec mes utilisateurs :
tblUtilisateur
- IDUtilisateur
- NomUtilisateur
Ainsi qu'une table avec les rencontres dont le champ num_tblUtilisateur est une clé étrangère qui représente l'organisateur :
tblRencontre
- IDRencontre
- TitreRencontre
- num_tblUtilisateur
Et pour les liées entre elles, j'ai aussi une dernière table dont le champ num_tblRencontre représente la rencontre au quel l'utilisateur num_tblUtilisateur participe :
tblParticipe
- num_tblRencontre
- num_tblUtilisateur
Jusque la, tout va bien (Du moins j'espère). Maintenant, sur une page PHP, j'affiche les rencontres aux-quels l'utilisateur XXX participe avec une requête SQL comme ceci.
En plus des rencontres aux-quels ils sont inscrits, les utilisateurs peuvent voir les autres rencontres disponibles. Jusqu'à présent j'utilisais la requête suivante.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 SELECT R.IDRencontre, R.TitreRencontre FROM tblRencontre R, tblUtilisateur U, tblParticipe P WHERE P.num_tblUtilisateur = U.IDUtilisateur AND P.num_tblRencontre = R.IDRencontre AND U.NomUtilisateur = 'XXX'
Mais j'ai remarqué que les utilisateurs voyaient des rencontres auxquels ils étaient déjà inscrit. Par exemple, imaginons.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT IDRencontre, TitreRencontre FROM tblRencontre
Table tblParticipe
TitreRencontre(num_tblRencontre)_________________NomUtilisateur(num_tblUtilisateur)
A(1)__________________________________________________XXX(1)
B(2)__________________________________________________XXX(1)
C(3)__________________________________________________YYY(2)
Table tblRencontre
IDRencontre__________________TitreRencontre
1_______________________________A
2_______________________________B
3_______________________________C
Table tblUtilisateur
IDUtilisateur_________________NomUtilisateur
1_____________________________XXX
2_____________________________YYY
L'utilisateur XXX qui est inscrit aux rencontres A et B verra dans les rencontres disponibles A, B et C mais que faudrait-il faire pour qu'il ne voit que les rencontres aux-quels il ne participe pas déjà ? C'est à dire C.
Idem pour l'utilisateur YYY, comme il ne participe qu'à la rencontre C, comment faire pour ne montrer que A et B comme disponible ?
L'exemple en image
Pour le moment j'ai ceci
Utilisateur XXX
=======================================
Vous participez aux rencontres suivantes
- A
- B
=======================================
Les rencontres suivantes sont disponibles
- A
- B
- C
J'aimerais
Utilisateur XXX
=======================================
Vous participez aux rencontres suivantes
- A
- B
=======================================
Les rencontres suivantes sont disponibles
- C
J'espère avoir été clairsi ce n'est pas le cas je serais ravis d'ajouter les précisions nécessaire à votre compréhension. La requête à modifier c'est donc celle lors de la sélection des rencontres disponibles. Je pensais le faire avec une jointure qui soustrairait les résultats, mais je ne vois pas comment faire cela. Merci d'avance pour votre aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT IDRencontre, TitreRencontre FROM tblRencontre
Partager