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 .
Partager