aodot Posté 26 Mars 2012 Partager Posté 26 Mars 2012 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
SStephane Posté 27 Mars 2012 Partager Posté 27 Mars 2012 A vue de nez : SELECT a.* FROM evenements a, evenements_inscrits b, amis cWHERE c.id_client = b.id_client AND b.id_evenement=a.idGROUP BY a.id Lien vers le commentaire Partager sur d’autres sites More sharing options...
jcaron Posté 27 Mars 2012 Partager Posté 27 Mars 2012 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
aodot Posté 27 Mars 2012 Auteur Partager Posté 27 Mars 2012 (modifié) 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 Modifié 27 Mars 2012 par aodot Lien vers le commentaire Partager sur d’autres sites More sharing options...
aodot Posté 27 Mars 2012 Auteur Partager Posté 27 Mars 2012 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
jcaron Posté 27 Mars 2012 Partager Posté 27 Mars 2012 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant