Données communes à 2 requêtes

Données communes à 2 requêtes - SQL/NoSQL - Programmation

Marsh Posté le 21-07-2008 à 14:06:55    

Hello,
Je génère une liste d'amis, mais j'aimerais connaître la liste des amis communs pour chacuns de ces amis.
J'ai un table user, group et user_group comme associative.
J'arrive à obtenir pour chaque amis, la liste de ses amis dans ma requête, mais pas des amis commun.
Comment procéder ?

Reply

Marsh Posté le 21-07-2008 à 14:06:55   

Reply

Marsh Posté le 21-07-2008 à 15:00:36    

avec le detail des tables ca serai mieux,

Reply

Marsh Posté le 21-07-2008 à 15:46:47    

user:
- id_user (primary key)
- prenom
- nom ...
 
group:
- id_group (primary key)
- id_user (propriétaire du groupe)
- nom_group
 
user_group:
- id_user_group (primary key)
- id_group
- id_user
 
Voilà.
-

Reply

Marsh Posté le 21-07-2008 à 17:07:49    

je comprend pas l'utilité de ta cle id_user_group
sachant que la entre user et group tu as une relation n:m, tu as juste besoin de id_group et id_user dans ta table user_group (tu auras jamais 2 fois la meme conbinaison vu un utilisateur va pas etre 2 fois inscrit au meme groupe)  , aprés pour ta requete , tu cherche les amis en commun par rapport à quoi , à une liste définit , les amis en commun de qui, c'est un peu flou la

Reply

Marsh Posté le 21-07-2008 à 17:38:20    

oui, c'est vrai que ce champ n'est pas très utile, sauf pour une référence lors de suppression, ça ne change rien au performances.
paul à 3 amis: jean, pierre et jacques (leur id_user est dans user_group et l'id_group est celui du groupe les amis de paul).
pierre à 4 amis: paul, jean, antoine, et alex.
paul et pierre ont jean comme amis commun.
Voilà, c'est un peu plus claire ?
 
Merci pour l'aide.

Reply

Marsh Posté le 21-07-2008 à 17:56:38    

ok donc tu passerai en parametre deux prenoms et la requete te renverrai le ou les amis en communs
c'est ca?

Reply

Marsh Posté le 21-07-2008 à 18:08:13    

si tu te souviens comment on fait l'inverse de "union" en SQl, c'est tout simple
mais je le m'en souvient plus  

Reply

Marsh Posté le 22-07-2008 à 11:18:46    

infoman64 a écrit :

si tu te souviens comment on fait l'inverse de "union" en SQl, c'est tout simple
mais je le m'en souvient plus  


INTERSECTION
 
Mais :
1/ c'est pas toujours supporté
2/ Un bête INNER JOIN entre les deux résultats retourne la même chose en plus rapide

Reply

Marsh Posté le 22-07-2008 à 13:54:21    

ah ok je savais pas que c'etait pas toujours supporté
c'est bon a savoir

Reply

Marsh Posté le 22-07-2008 à 20:07:29    

Merci pour la code et les fonctions, je vais essayer, mais j'aimerais tout de même comprendre ce que je fait.
J'ai utilisé le INNER JOIN pour la 1ère x et ça fonctionne, j'obtiens la liste d'amis de mes amis, mais pas encore les communs.
Voici le code:

Code :
  1. SELECT * FROM $table_user
  2.    INNER JOIN $table_user_group
  3.     ON $table_user_group.id_user=$table_user.id_user
  4.      INNER JOIN $table_group
  5.       ON $table_group.id_user=$friends_id AND $table_group.id_group=$table_user_group.id_group

Reply

Marsh Posté le 22-07-2008 à 20:07:29   

Reply

Marsh Posté le 22-07-2008 à 20:10:58    

au fait, j'ai oublié, si je remplace le $friends_id par $id_user, alors j'obtiens la liste de mes amis.
en prenant les id_user communs de cette requête avec la même bis ($id_user à la place de $friends_id), j'obtiens ce qu'il me faut.

Reply

Marsh Posté le 09-08-2008 à 10:47:53    

mais je n'ai toujours pas trouvé la solution pour obtenir les enregistrements communs à ces 2 requêtes.

Reply

Marsh Posté le 11-09-2008 à 23:19:41    

je n'ai pas encore trouvé avec la BDD, mais il faudra faire les 2 requêtes et tester dans un boucle.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed