Bonjour à tous,

Je galère depuis un 2 jours sur une requête que je n'arrive pas à faire, merci de me donner quelques indications ou conseils .

Je schématise la base :
---------------------------


--
-- Structure de la table `users`
--

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
CREATE TABLE `users` ( 
  `user_id` mediumint(8) NOT NULL default '0', 
  `user_photo` varchar(100) default NULL, 
  `user_nom` varchar(255) default NULL, 
  `user_prenom` varchar(100) default NULL, 
    PRIMARY KEY  (`user_id`), 
  ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
-- --------------------------------------------------------

--
-- Structure de la table `users_friends`
--

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
CREATE TABLE `users_friends` ( 
  `friend_id` mediumint(8) NOT NULL auto_increment, 
  `user_id` mediumint(8) NOT NULL default '0', ==> celui qui demande à être un ami 
  `posterfriend_id` mediumint(8) NOT NULL default '0', ==> celui qui accepte d'être un ami 
  `comments_friend` text NOT NULL, 
  `confirm_friend` mediumint(1) NOT NULL default '0', 
  `time_friend` int(11) default NULL, 
  PRIMARY KEY  (`friend_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=32 ;




Je schématise l'exemple :
------------------------------

A est ami avec B
A est ami avec C

D est ami avec B
D est ami avec C

Mon souhait est de faire une requête ( imbriquées ou pas ) qui propose à A s'il connaît D car ils ont 2 amis en commun ( proposer d'être ami avec qq1 s'ils ont au moins 2 amis en commun )


Alors, après tes tentatives qui sont restées vaines je suis arrivé à celle ci et qui ne marche pas :


Code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
SELECT uc . * , u.user_id, u.user_photo, u.user_nom, u.user_prenom 
FROM users_friends uc, users u 
WHERE 
(uc.user_id 
 
IN ( 
 
<! debut de la liste du connecté qui marche !> 
 
SELECT u.user_id 
FROM users_friends uc, users u 
WHERE u.user_id <> -1 
AND ( 
uc.user_id =3178    ==> l'id = du connecté 
OR uc.posterfriend_id =3178 
) 
AND ( 
u.user_id = uc.posterfriend_id 
OR u.user_id = uc.user_id 
) 
AND u.user_id !=3178 
AND uc.confirm_friend =1 
<! fin de la liste du connecté qui marche !> 
 
) 
 
OR 
uc.posterfriend_id 
 
IN ( 
 
<! debut de la liste du connecté qui marche !> 
 
SELECT u.user_id 
FROM users_friends uc, users u 
WHERE u.user_id <> -1 
AND ( 
uc.user_id =3178 
OR uc.posterfriend_id =3178 
) 
AND ( 
u.user_id = uc.posterfriend_id 
OR u.user_id = uc.user_id 
) 
AND u.user_id !=3178 
AND uc.confirm_friend =1 
<! fin de la liste du connecté qui marche !> 
 
) 
) 
 
AND ( 
uc.user_id !=3178 
OR uc.posterfriend_id !=3178 
) 
ORDER BY u.user_id DESC


Elle est tirée par les cheveux mais je suis en plein désespoir, merci de vos lumières .