Jump to content
Sign in to follow this  
aodot

Requête sur 3 tables et EXISTS

Rate this topic

Recommended Posts

Bonsoir à tous,

J'ai actuellement besoin d'une grosse requête et cela dépasse mes compétences.

J'ai chercher sur Internet et j'ai trouvé la fonction exists.

Voila en gros ce que je dois faire :

- j'ai 3 tables : une avec des évènements, une autre avec les inscriptions aux évènements et la seconde avec les liens d'amitié.

- je dois donc recherche les évènements ou les inscrits sont amis entre eux, je ne sais pas si je suis clair mais bon.

Voici ce que j'ai pondu mais j'ai l'impression que le second exists n'est pas pris en compte.

SELECT * FROM evenements a WHERE EXISTS (SELECT * FROM evenements_inscrits b WHERE EXISTS (SELECT * FROM amis c WHERE c.id_client = b.id_client) AND b.id_evenement=a.id)

Qu'en pensez vous ?

Est ce une erreur, il y a t'il une autre méthode ?

Merci par avance.

Share this post


Link to post
Share on other sites

A vue de nez :

SELECT a.* FROM evenements a, evenements_inscrits b, amis c
WHERE c.id_client = b.id_client AND b.id_evenement=a.id
GROUP BY a.id

Share this post


Link to post
Share on other sites

Je dirais plutôt:


SELECT a.* FROM evenements e, evenements_inscrits ei1, evenements_inscrits ei2, amis a WHERE e.id = ei1.id_evenement AND e.id = ei2.id_evenement AND ei1.id_client=a.id_client1 AND ei2.id_client=a.id_client2

Non?

Jacques.

Share this post


Link to post
Share on other sites

Bonjour,

Merci à vous deux pour vos réponses.

Je penses que celle de Jacques se rapproche plus de ce que je veux faire car je dois mettre en place une boucle while et le group by ne correspondra pas à ma demande.

Une petite question pour Jacques : pourquoi dans la requete inséres tu deux fois la base evenements_inscrits avec evenements_inscrits ei1, evenements_inscrits ei2 ?

Cela correspond à la même chose non ?

Et à quoi correspond le SELECT a.* ? SI je vais SELECT * cela ira t il ?

UN grand merci par avance en tout cas, je vais tester cela de ce pas.

Aymeirc

Edited by aodot

Share this post


Link to post
Share on other sites

Encore une question sur la requête de Jacques.

Sachant que pour un évènement il y a plusieurs inscriptions de membres possibles est ce que la requète va prendre en compte la première inscription ou toutes ?

Merci par avance.

Share this post


Link to post
Share on other sites

Si ce que tu veux c'est bien les événements pour lesquels il y a deux inscrits différents qui sont en plus des amis, il faut bien que tu aies un lien entre l'événement et le premier inscrit (ei1) et un lien entre l'événement et le deuxième inscrit (ei2), qui sont associés au même événement (e) et avec un lien entre les deux inscrits (a).

Et en fait je voulais dire e.* (si tu veux les détails de l'événement, mais que tu te moques des inscrits etc.), mais * ou une liste plus complète convient très bien. Note évidemment que comme tu as plusieurs tables qui ont des colonnes identiques avec * tu ne peux pas récupérer toutes les valeurs de ces colonnes (il faut que tu les spécifies explicitement en précisant un alias pour chaque colonne que tu veux).

La requête que j'indique donne toutes les combinaisons événement, inscrit1, inscrit2. Si tu veux une seule ligne par événement, un group by sera en effet nécessaire.

Jacques.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...