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.

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'
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
 
SELECT IDRencontre, TitreRencontre
FROM tblRencontre
Mais j'ai remarqué que les utilisateurs voyaient des rencontres auxquels ils étaient déjà inscrit. Par exemple, imaginons.

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é clair si 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